我的模式是这样的
{
info: {
items: Number,
someInteger: Number
},
items: [
{
itemId: Number,
itemTime: Number
}
]
}
我正在尝试增加所有值。我可以轻松地增加例如info.items,但是我不知道如何增加给定itemId的item。$。itemTime,而无需为每个不同的itemIds进行另一个更新函数调用。我以为这样效率低下。
答案 0 :(得分:0)
查看嵌入式注释。
let obj = {
info: {
items: 2,
someInteger: 4
},
items: [
{
itemId: 6,
itemTime: 8
}
]
};
function increment(obj, key, prop, index){
// Check to see if the key passed holds an array
if(obj[key] instanceof Array){
// Use the index to get to the right child object
obj[key][index][prop]++;
} else {
// Just increment the property
obj[key][prop]++;
}
}
increment(obj, "items", "itemTime", 0);
increment(obj, "info", "items");
console.log(obj);
答案 1 :(得分:0)
您可以迭代对象的条目并检查该值是否是另一个对象,然后迭代嵌套的对象。否则,调用该函数并更新属性。
function update(object, fn) {
Object
.entries(object)
.forEach(([k, v]) => {
if (v && typeof v === 'object') {
update(v, fn);
return;
}
object[k] = fn(v);
});
}
var data = { info: { items: 1, someInteger: 2 }, items: [{ itemId: 3, itemTime: 4 }] };
update(data, v => v + 1);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }