Ответ 1
Вы можете сделать это с помощью map()
var arrOfObj = [{
name: 'eve'
}, {
name: 'john'
}, {
name: 'jane'
}];
var result = arrOfObj.map(function(o) {
o.isActive = true;
return o;
})
console.log(result)
Я хотел добавить параметр key: value ко всем объектам в массиве.
например:
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
Теперь я хотел добавить новый параметр, isActive ко всем объектам, так что получившийся массив будет выглядеть.
например:
[{
name: 'eve',
isActive: true
}, {
name: 'john',
isActive: true
}, {
name: 'jane',
isActive: true
}]
Я всегда могу прокрутить массив и вставить пару ключ, значение. Но было интересно, есть ли лучший способ сделать это.
Вы можете сделать это с помощью map()
var arrOfObj = [{
name: 'eve'
}, {
name: 'john'
}, {
name: 'jane'
}];
var result = arrOfObj.map(function(o) {
o.isActive = true;
return o;
})
console.log(result)
Функция map() является лучшим выбором для этого случая:
[
{name: 'eve'},
{name: 'john'},
{name: 'jane'}
].map(v => ({...v, isActive: true}))
Функция map() function не изменяет исходный массив, а создает новый.
Также вместо .map(v => ({...v, isActive: true}))
вы можете использовать альтернативный синтаксис .map(v => Object.assign({}, {isActive: true}))
(почти такой же , проверьте разницу)
П.С. Я бы порекомендовал вам изучить следующие методы: map(), filter() и redu().
Я был бы немного осторожен с некоторыми ответами, представленными здесь, следующие примеры выводят по-разному в соответствии с подходом:
const list = [ { a : 'a', b : 'b' } , { a : 'a2' , b : 'b2' }]
console.log(list.map(item => item.c = 'c'))
// [ 'c', 'c' ]
console.log(list.map(item => {item.c = 'c'; return item;}))
// [ { a: 'a', b: 'b', c: 'c' }, { a: 'a2', b: 'b2', c: 'c' } ]
console.log(list.map(item => Object.assign({}, item, { c : 'c'})))
// [ { a: 'a', b: 'b', c: 'c' }, { a: 'a2', b: 'b2', c: 'c' } ]
Я использовал узел v8.10.0 для тестирования приведенных выше фрагментов кода.
Решение @Redu - хорошее решение
arrOfObj.map(o = > o.isActive = true;) но Array.map по-прежнему считается циклом всех элементов.
если вы абсолютно не хотите, чтобы какой-либо цикл был здесь грязным взломом:
Object.defineProperty(Object.prototype, "isActive",{
value: true,
writable: true,
configurable: true,
enumerable: true
});
Мой совет - не использовать его осторожно, хотя, он будет исправлять абсолютно все объекты javascript (Date, Array, Number, String или любые другие, которые наследуют Object), что является действительно плохой практикой...
Просто вы можете добавить этот путь. см. ниже изображение консоли
Цитирование через массив и вставка пары ключ, значение - это ваше лучшее решение. Вы можете использовать функцию "map", но это просто вопрос предпочтения.
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
arrOfObj.map(function (obj) {
obj.isActive = true;
});
Просто используйте map:
var arrOfObj = arrOfObj.map(function(element){
element.active = true;
return element;
}
Карта довольно приличная в отношении совместимости: вы можете быть достаточно безопасным от IE <= 9.
Однако, если вы на 100% уверены, что ваши пользователи будут использовать браузер, совместимый с ES6, вы можете сократить эту функцию с помощью функций стрелок, так как @Sergey - предположил Панфилов.
Вы также можете попробовать следующее:
arrOfObj.forEach(function(item){item.isActive = true;});
console.log(arrOfObj);
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
var injectObj = {isActive:true, timestamp:new Date()};
// function to inject key values in all object of json array
function injectKeyValueInArray (array, keyValues){
return new Promise((resolve, reject) => {
if (!array.length)
return resolve(array);
array.forEach((object) => {
for (let key in keyValues) {
object[key] = keyValues[key]
}
});
resolve(array);
})
};
//call function to inject json key value in all array object
injectKeyValueInArray(arrOfObj,injectObj).then((newArrOfObj)=>{
console.log(newArrOfObj);
});
Вывод выглядит следующим образом: -
[ { name: 'eve',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z },
{ name: 'john',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z },
{ name: 'jane',
isActive: true,
timestamp: 2017-12-16T16:03:53.083Z } ]
arrOfObj.map(o => {
o.isActive = true;
return o;
});