值被覆盖在循环内分配json值

时间:2015-04-09 08:09:03

标签: javascript jquery json

我怎样才能生产这样的东西?

{
    "drink": {
        "2": {
            "name": "coke",
            "type": "drink"
        },
        "3": {
            "name": "coke",
            "type": "drink"
        }
    },
    "food": {
        "id": "1",
        "name": "1 Hour Snooker",
        "type": "food"
    }
}

我在“饮料”下生产多个物品时遇到了问题。宾语。它被我的下面的代码覆盖了:

http://jsfiddle.net/jLgh4at5/

var json = {
    "results": {
        "slots": [{
            "id": "3",
                "name": "pepsi",
                "type": "drink"
        }, {
            "id": "1",
                "name": "1 Hour Snooker",
                "type": "food"
        }, {
            "id": "2",
                "name": "coke",
                "type": "drink"
        }]
    }
}

var data = {
    "slots": {

    }
}

json.results.slots.forEach(function (b) {
    if (b["type"] == "food") {
        data.slots["food"] = b;
    } else {
        data.slots["drink"] = b;
    }
});

console.log(data);

1 个答案:

答案 0 :(得分:1)

使用数组索引解决问题。

json.results.slots.forEach(function (b,i) {
    if (b["type"] == "food") {
        if(data.slots["food"]) 
            data.slots["food"][i] = {"name":b.name,"type":"food"}; 
        else 
            data.slots["food"] = {};
    } else {
        if(data.slots["drink"]) 
            data.slots["drink"][i] = {"name":b.name,"type":"drink"};
        else 
            data.slots["drink"] = {};
    }
});

或者您可以优化代码,如下所示。

var data = {
    "slots": {
       "food": {},
       "drink": {}
    }
};

json.results.slots.forEach(function (b,i) {
     if (b["type"] == "food") {
        data.slots["food"][i] = {"name":b.name,"type":"food"};
    } else {
        data.slots["drink"][i] = {"name":b.name,"type":"drink"};;
    }
});

以下是更新后的JSFiddle

相关问题