У меня есть массив объектов, как показано ниже
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"
Может кто-нибудь, дайте мне знать, как этого добиться.
javascript
arrays
object
underscore.js
Патрик
источник
источник
Ответы:
Вы можете использовать этот
forEach
метод для однократного выполнения предоставленной функции для каждого элемента в массиве. В этой предоставленной функции вы можете добавитьActive
свойство к элементу.Results.forEach(function (element) { element.Active = "false"; });
источник
или используйте
map
Results.map(obj=> ({ ...obj, Active: 'false' }))
Отредактировано, чтобы отразить комментарий @adrianolsk, чтобы не изменять оригинал и вместо этого возвращать новый объект для каждого.
Прочтите спецификацию
источник
Results.map(obj=> ({ ...obj, Active : 'false' }))
Object.defineProperty(Results, "Active", {value : 'true', writable : true, enumerable : true, configurable : true});
источник
Я тоже столкнулся с этой проблемой, и, пытаясь ее решить, я постоянно ломал вкладку 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); });
источник
Он проходит через объект как структуру «ключ-значение». Затем он добавит новое свойство с именем «Активный» и примерное значение этого свойства («Активный») для каждого отдельного объекта внутри этого объекта. этот код можно применять как для массива объектов, так и для объекта объектов.
Object.keys(Results).forEach(function (key){ Object.defineProperty(Results[key], "Active", { value: "the appropriate value"}); });
источник
С ES6 вы можете просто:
for(const element of Results) { element.Active = "false"; }
источник