Как я могу добавить новое свойство для объекта в массиве - PullRequest
0 голосов
/ 09 июня 2018

У меня есть массив объектов

var array = [ {type: 'news', id: 1}, {type: 'contacts', id: 7}, {type: 'messages', id: 11} ]

Мне нужно решение, что я могу добавить свойство и значение к объекту.Чтобы определить, к какому объекту добавить свойство, у меня есть тип

Что-то вроде

function(arr = array, type = 'news', property = 'visibility ', value = 'yes') {

    var obj = arr.find(item => item.type === type)

    /* magic */


    return result


}


result = [ {type: 'news', id: 1, visibility: 'yes'}, {type: 'contacts', id: 7}, {type: 'messages', id: 11} ]

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Предполагая, что массив может содержать более одного object === type, вы можете использовать функции forEach и Object.assing для установки новых свойств для каждого сопоставленного объекта.

Этот подход изменяет объектыиз исходного массива.

function findNSet(arr, type, property, value) {
  arr.forEach(o => {
    if (o.type === type) Object.assign(o, {[property]: value});
  });
}

let array = [{type: 'news',  id: 1}, {  type: 'contacts',  id: 7}, {  type: 'messages',  id: 11}];

findNSet(array, 'news', 'visibility', 'yes');
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 09 июня 2018

Простой ответ (если вы согласны с изменением существующего объекта):

obj[property] = value

Если мутации не разрешены, то:

function(arr = array, type = 'news', property = 'visibility ', value = 'yes') {
  return arr.map((item) => {
    if(item.type === type) {
      return {...item, [property]: value}
    }
    return item
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...