Обновить массив по ключу - PullRequest
0 голосов
/ 15 декабря 2018

Моя схема выглядит следующим образом

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

И я пытаюсь увеличить все значения.Я могу легко увеличить, например, info.items, но не могу понять, как увеличивать элементы.Я думал, что это будет неэффективно.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вы можете перебирать записи объекта и проверять, является ли значение другим объектом, а затем перебирать вложенный объект.В противном случае вызовите функцию и обновите свойство.

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; }
0 голосов
/ 15 декабря 2018

См. Встроенные комментарии.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...