最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - get values in pairs from json array - Stack Overflow

programmeradmin1浏览0评论

Firstly, this is my json value i am getting from a php source:

[{"oid":"2","cid":"107"},{"oid":"4","cid":"98"},{"oid":"4","cid":"99"}]

After that, I want to get and oid value along with the corresponding cid value for example, oid=2 and cid=107 at one go, oid=4 and cid=98 at another and so on. I am trying to use jquery, ajax for this.

I have tried many answers for this, like: Javascript: Getting all existing keys in a JSON array and loop and get key/value pair for JSON array using jQuery but they don't solve my problem.

I tried this:

for (var i = 0; i < L; i++) { var obj = res[i]; for (var j in obj) { alert(j); }

but all this did was to return the key name, which again did not work on being used.

Firstly, this is my json value i am getting from a php source:

[{"oid":"2","cid":"107"},{"oid":"4","cid":"98"},{"oid":"4","cid":"99"}]

After that, I want to get and oid value along with the corresponding cid value for example, oid=2 and cid=107 at one go, oid=4 and cid=98 at another and so on. I am trying to use jquery, ajax for this.

I have tried many answers for this, like: Javascript: Getting all existing keys in a JSON array and loop and get key/value pair for JSON array using jQuery but they don't solve my problem.

I tried this:

for (var i = 0; i < L; i++) { var obj = res[i]; for (var j in obj) { alert(j); }

but all this did was to return the key name, which again did not work on being used.

Share Improve this question edited May 23, 2017 at 12:31 CommunityBot 11 silver badge asked Aug 7, 2013 at 12:49 xprilionxprilion 5891 gold badge5 silver badges15 bronze badges 2
  • Please include attempted solutions, why they didn't work, and the expected results. – palaѕн Commented Aug 7, 2013 at 12:51
  • One thing I would suggest: open up chrome's js console, and look at the variable in the debugger. Then you should be able to see what's going wrong (maybe trying to access the wrong variable, or not deep enough). – JGibbers Commented Aug 7, 2013 at 12:52
Add a comment  | 

3 Answers 3

Reset to default 9

So, you have an array of key/value pairs. Loop the array, at each index, log each pair:

var obj = [{"oid":"2","cid":"107"},{"oid":"4","cid":"98"},{"oid":"4","cid":"99"}];

for (var i = 0; i < obj.length; i++) {
    console.log("PAIR " + i + ": " + obj[i].oid);
    console.log("PAIR " + i + ": " + obj[i].cid);
}

Demo: http://jsfiddle.net/sTSX2/

This is an array that you have //lets call it a:

[{"oid":"2","cid":"107"},{"oid":"4","cid":"98"},{"oid":"4","cid":"99"}]

To get first element :

a[0] // this will give you first object i.e {"oid":"2","cid":"107"}

a[0]["oid"] // this will give you the value of the first object with the key "oid" i.e 2

and so on ...

Hope that helps. `

Basically what you need is grouping of objects in the array with a property. Here I am giving two functions using which you can do this

// To map a property with other property in each object. 
function mapProperties(array, property1, property2) {

    var mapping = {};

    for (var i = 0; i < data.length; i++) {
        var item = data[i];
        mapping[item[property1]] = mapping[item[property1]] || [];
        mapping[item[property1]].push(item[property2]);
    }

    return mapping;

}

// To index the items based on one property.
function indexWithProperty(array, property) {
    var indexing = {};

    for (var i = 0; i < data.length; i++) {
        var item = data[i];
        indexing[item[property]] = indexing[item[property]] || [];
        indexing[item[property]].push(item);
    }

    return indexing;
}

var data = [{
    "oid": "2",
    "cid": "107"
}, {
    "oid": "4",
    "cid": "98"
}, {
    "oid": "4",
    "cid": "99"
}];


var oidCidMapping = mapProperties(data, "oid", "cid");
console.log(oidCidMapping["2"]); // array of cids with oid "2"

var indexedByProperty = indexWithProperty(data, "oid");
console.log(indexedByProperty["4"]); // array of objects with cid "4"

May not be the exact solution you need, but I hope I am giving you the direction in which you have to proceed.

If you are willing to use other library you can achieve the same with underscorejs

发布评论

评论列表(0)

  1. 暂无评论