Хотя это невозможно (как иллюстрируют другие), вы могли бы использовать аннотацию для переноса имени параметра и получить это хотя отражение.
Не самый чистый но он выполняет свою работу. Некоторые веб-службы на самом деле делают это, чтобы сохранить имена параметров (то есть: развертывание WSs с помощью стеклянной рыбы).
Вы можете перебрать массив channels
, используя forEach()
, и использовать Object.assign()
для переопределения свойства.
let channels = [
{name: 'mega', status: true },
{name: 'ant' , status: false},
{name: 'apl' , status: true }
];
let obj = {
0: false,
1: true
};
channels.forEach((o, i) => i in obj ? Object.assign(o, {status: obj[i]}) : o);
console.log(channels);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Этот цикл должен сделать это.
for(var key in obj){
channels[key].status = obj[key]
}
Простой цикл for будет делать:
for (let index in obj) channels[index].status = obj[index];
const channels=[{name: "mega", status: true}, {name: "ant", status: false}, {name: "apl", status: true}];
const obj={0: false, 1:true};
for (let index in obj) {
channels[index].status = obj[index];
}
console.log(channels);
Если вы не хотите изменять оригинал массив, но хотите новый массив с модификациями:
const channels=[{name: "mega", status: true}, {name: "ant", status: false}, {name: "apl", status: true}];
const obj={0: false, 1:true};
const result = channels.map(({name, status}, i) =>
({name, status: i in obj ? obj[i] : status})
);
console.log(result);
Вы можете перебирать obj
любым способом, который вам нравится (здесь я использовал Object.keys
, чтобы получить массив ключей от объекта obj
и ]. forEach
перебирать их) и обновлять поле. Это может быть достигнуто в одной строке кода:
const channels = [
{name: "mega", status: true},
{name: "ant", status: false},
{name: "apl", status: true}
];
const obj = {
"0": false,
"1": true
};
Object.keys(obj).forEach((item, i) => channels[i].status = obj[i]);
/**
* If "channels" array is NOT ALWAYS longer than the amount of "obj" properties,
* you should add the check for existence, the simpliest one is implemented below:
*
* Object.keys(obj).forEach((item, i) => channels[i] ? channels[i].status = obj[i] : null);
*/
console.log(channels);
В представленном случае исходный массив будет видоизменяться, и если это не то, что вам нужно, я рекомендую взглянуть на метод map
, он не изменяет исходный массив, а создает новый.