在循环中分配json值时,值被覆盖
value got overwritten assigning json value within loop
如何生成这样的东西?
{
"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);
使用数组索引来解决问题。
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
相关文章:
- 在循环中分配json值时,值被覆盖
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- 在数据库中循环值时,为输入框获取唯一值
- 为变量分配多个nodejs导出返回值时出现问题
- 使用jQuery设置HTML5属性值时出现问题
- 仅当变量有值时才显示D3文本标签
- 在内部映射值时渲染方法中断
- _.map在返回时覆盖值
- 在Laravel 5中使用JQuery从href提取值时出错
- 如何在使用AngularJS更改下拉值时清除表单中的数据
- 比较sessionStorage值时,Javascript函数无法调用
- 比较两个值时出现JavaScript输出和控制流错误
- 如何在单击单元格中的链接值时动态更改表行背景色
- 当按下链接以在不同页面上的表单中的下拉列表中设置值时
- 更改值时未触发$watch
- 尝试从csv文件中检索单个值时出现问题
- 当数组在angularjs中没有可比较的值时,如何分配默认值
- 如何使用jQuery来添加分段的表单字段,并在添加不同值时进行更新
- ZingChart-如何在实时提要中添加值时保持缩放级别
- 当我需要将页边距底部设置为新值时,它将被覆盖