Как проверить, существует ли свойство в массиве объектов в JS - PullRequest
1 голос
/ 02 ноября 2019

У меня есть массив с объектами, созданными динамически. Я буду использовать следующий пример:

const workers = [{
    Construction: 500,
    workers: 0
  },
  {
    Debilite: 800,
    workers: 0
  },
  {
    Marketing: 1200,
    workers: 0
  },
  {
    'Human Resources': 1350,
    workers: 0
  },
]

Как узнать, существует ли имя свойства и изменить его значение? Например, если свойство «Строительство» существует, измените его значение с 500 на 800, а работники должны измениться с 0 на 1.

Ответы [ 3 ]

1 голос
/ 02 ноября 2019

Вы можете найти объект и назначить новые значения.

function update(array, key, values) {
    Object.assign(array.find(o => key in o) || {}, values);
}

const workers = [{ Construction: 500, workers: 0 }, { Debilite: 800, workers: 0 }, { Marketing: 1200, workers: 0 }, { 'Human resources': 1350, workers: 0 }];

update(workers, 'Construction', { Construction: 800, workers: 1 });

console.log(workers);
1 голос
/ 02 ноября 2019

Цикл по массиву, проверка каждого объекта, обновление по мере необходимости.

У вас есть две синтаксические ошибки с вашим кодом:

  1. Не должно быть запятой после последнейэлемент в массиве.
  2. Human resources не является допустимым ключом объекта, если он не в кавычках.

const workers = [
  { Construction: 500, workers: 0 },
  { Debilite: 800, workers: 0 },
  { Marketing: 1200, workers: 0 },
  { "Human resources": 1350, workers: 0 } // <-- No comma after last array item and no spaces in key unless quoted
];

// Loop over the array
workers.forEach(function(obj){
  // Check current array item for existence of property
  if(obj.Construction){
    // Update as needed
    obj.Construction = 800;
    obj.workers = 1; 
  }
});

console.log(workers);
0 голосов
/ 02 ноября 2019

У вас есть array из objects.

Так что вам нужно выполнить два шага:

  1. Цикл по array (либо с помощью forцикл, или используя forEach)
  2. На каждой итерации цикла используйте object.hasOwnProperty(key)

В этом случае вы можете использовать что-то вроде:

workers.forEach((worker) => {

  if (worker.hasOwnProperty('Construction')) {
    worker['Construction'] = 800;
    worker['workers'] = 1;
  }
});

Рабочий пример:

const workers = [{
    Construction: 500,
    workers: 0
  },
  {
    Debilite: 800,
    workers: 0
  },
  {
    Marketing: 1200,
    workers: 0
  },
  {
    'Human Resources': 1350,
    workers: 0
  },
];

workers.forEach((worker) => {

  if (worker.hasOwnProperty('Construction')) {
    worker['Construction'] = 800;
    worker['workers'] = 1;
  }
});

console.log(workers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...