【发布时间】:2018-02-23 22:35:48
【问题描述】:
我正在尝试使用结构不佳的现有对象数组(数组?)例如,使用新键和道具创建一个新对象(newobj)。
[{"product":["1009", "name", "price", "image", "description"]},
{"product":["1004", "name2", "price2", "image2", "description2"]}]
我得到了我想要的结果,但 newobj 不会在 forEach 方法的范围之外更新(超过 1 个结果)。我的问题是我没有得到什么? forEach 是这种类型的 obj 方法不正确吗?
var newobj = {};
Object.keys(oldobj).forEach(function(prop) {
newobj["id"] = Number(oldobj[prop]["product"][0]),
newobj["name"] = oldobj[prop]["product"][1],
newobj["price"] = Number(oldobj[prop]["product"][3]),
newobj["image"] = "url" + oldobj[prop]["product"][0] + ".jpg",
newobj["description"] = oldobj[prop]["product"][2];
// this works
// console.log(JSON.stringify(newobj));
});
// this only updated with one
app.locals.newobj = newobj;
我也尝试过映射(带下划线),但结果相同,我无法访问外部范围。
_.each(mappedobj, function(prop) {
_.each(prop["product"][0], function(vals){
newobj["id"] = Number(prop["product"][0]);
console.log(JSON.stringify(newobj));
});
});
【问题讨论】:
-
每次循环都覆盖
newobj的相同属性。所以最终结果将只是上次迭代的值。 -
oldobj是一个数组,你为什么用Object.keys()而不是oldobj.forEach()? -
你想要得到什么结果?
-
你为什么要把
[2]放到description中?不应该是[4]吗? -
@Barmar 我必须更改新对象 (newobj) 中的属性顺序。原始对象具有不同的属性顺序,我没有提供具有正确顺序的虚拟数据。道歉,谢谢!
标签: javascript express foreach key