按键更新数组

时间:2018-12-15 19:24:16

标签: javascript node.js mongoose nosql

我的模式是这样的

{
    info: {
        items: Number,
        someInteger: Number
    },
    items: [
        {
            itemId: Number,
            itemTime: Number
        }
    ]
}

我正在尝试增加所有值。我可以轻松地增加例如info.items,但是我不知道如何增加给定itemId的item。$。itemTime,而无需为每个不同的itemIds进行另一个更新函数调用。我以为这样效率低下。

2 个答案:

答案 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; }