Додайте властивість до масиву об’єктів


103

У мене є масив об’єктів, як показано нижче

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
1:Object
       id=2     
       name:'david'

Я хочу додати ще одну властивість з іменем Active до кожного елемента цього масиву Об'єктів.

Кінцевий результат повинен бути таким.

Object {Results:Array[2]}
     Results:Array[2]
[0-1]
0:Object
       id=1     
       name: "Rick"
       Active: "false"
1:Object
       id=2     
       name:'david'
       Active: "false"

Може хтось, будь ласка, дайте мені знати, як цього досягти.


6
Прокрутіть масив. Додайте властивості до кожного елемента масиву під час циклу. Яку частину ви не знаєте, як зробити?
JJJ

Відповіді:


147

Ви можете використовувати forEachметод для виконання наданої функції один раз для кожного елемента масиву. У цій наданій функції ви можете додати Activeвластивість до елемента.

Results.forEach(function (element) {
  element.Active = "false";
});

204

або використовувати map

Results.map(obj=> ({ ...obj, Active: 'false' }))

Відредаговано для відображення коментаря @adrianolsk, щоб не мутувати оригінал і замість цього повернути новий об’єкт для кожного.

Прочитайте специфікацію


4
підтримується лише в ES6
Амайнут

5
ES5, якщо бути точним;) - але
Бабель з

50
map повинен повернути новий масив, а не мутувати об'єкт, у цьому випадку forEach було б краще, або скористатися map і повернути новий об'єктResults.map(obj=> ({ ...obj, Active : 'false' }))
adrianolsk

4
Чудове рішення @adrianolsk, ви повинні подати це як окрему відповідь.
Майкл Хейс


1

Я теж зіткнувся з цією проблемою, і намагаючись її вирішити, я постійно збивав вкладку chrome, на якій працював мій додаток. Схоже, винуватцем був оператор поширення для об’єктів .

З невеликою допомогою коментаря Адріанольська та відповіді Сидональдсона вище, я використав Object.assign () вихід оператора поширення з babel, приблизно так:

this.options.map(option => {
  // New properties to be added
  const newPropsObj = {
    newkey1:value1,
    newkey2:value2
  };

  // Assign new properties and return
  return Object.assign(option, newPropsObj);
});

0

Він проходить через об'єкт як структуру ключ-значення. Потім він додасть нову властивість з назвою "Активний" та значення зразка для цієї властивості ("Активний") до кожного окремого об'єкта всередині цього об'єкта. цей код може застосовуватися як до масиву об'єктів, так і до об'єкта об'єктів.

   Object.keys(Results).forEach(function (key){
            Object.defineProperty(Results[key], "Active", { value: "the appropriate value"});
        });

Так, звичайно, він проходить через об’єкт як структуру ключ-значення. Потім він додасть нову властивість під назвою "Активний" та значення зразка до кожного окремого об'єкта всередині цього об'єкта. цей код може застосовуватися як до масиву об'єктів, так і до об'єкта об'єктів.
Arash MAS

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.