Мой массив:
[
{
name: 'test1',
state: 'OK',
status: true,
pending: 33,
approved: 0,
active: 0,
inactive: 33
},
{
name: 'test3',
state: 'OK',
status: true,
pending: 33,
approved: 0,
active: 0,
inactive: 33
},
{
name: 'test4',
state: 'OK',
status: true
}
]
Если «ожидающий», «одобренный», «активный», «неактивный» ключ не существует в объекте, мне нужен следующий вывод:
Ожидаемый результат:
[
{
name: 'test1',
state: 'OK',
status: true,
pending: 33,
approved: 0,
active: 0,
inactive: 33
},
{
name: 'test3',
state: 'OK',
status: true,
pending: 33,
approved: 0,
active: 0,
inactive: 33
},
{
name: 'test4',
state: 'OK',
status: true,
pending: 0,
approved: 0,
active: 0,
inactive: 0
}
]
Как это сделать?
Я пробовал использовать карту, но не знаю, как задать условие.
Я хочу обнулить значения.
Хорошо, подождите........



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


.map(), чтобы перебирать объекты данного массива, передавая обратный вызов.Object.assign(), чтобы создать закрытие текущего объекта, передав пустой объект, объект по умолчанию и текущий объект в качестве аргументов. Сначала значения по умолчанию будут скопированы в пустой объект, а затем Object.assign() скопирует каждое свойство из текущего объекта в клонированном, эффективно переопределив значения по умолчанию.Ниже представлена демонстрация:
let data = [
{name: 'test1',state:'OK',status:true,pending: 33,approved: 0,active: 0,inactive: 33},
{name: 'test3',state:'OK',status:true,pending: 33,approved: 0,active: 0,inactive: 33},
{name: 'test4',state:'OK',status:true}
];
let defaults = {
pending: 0,
approved: 0,
inactive: 0,
active: 0
};
let result = data.map(o => Object.assign({}, defaults, o));
console.info(result);.as-console-wrapper { max-height: 100% !important; top: 0; }Ресурсы:
Вы можете использовать .forEach для применения вашего условия к каждому объекту.
arr = [
{
name: 'test1',
state: 'OK',
status: true,
pending: 33,
approved: 0,
active: 0,
inactive: 33
},
{
name: 'test3',
state: 'OK',
status: true,
pending: 33,
approved: 0,
active: 0,
inactive: 33
},
{
name: 'test4',
state: 'OK',
status: true
}
]
arr.forEach(obj => {for (let p of ['pending', 'approved', 'active', 'inactive']){
if (!obj.hasOwnProperty(p)){
obj[p] = 0;
}
}});
console.info(arr);Вы можете использовать Array.map() и использовать массив свойств, перебирать массив свойств и проверять для каждого объекта, присутствует ли это свойство в объекте или нет, если его нет, просто добавьте свойство и присвойте ему значение 0.
let arr = [ { name: 'test1', state: 'OK', status: true, pending: 33, approved: 0, active: 0, inactive: 33 }, { name: 'test3', state: 'OK', status: true, pending: 33, approved: 0, active: 0, inactive: 33 }, { name: 'test4', state: 'OK', status: true } ];
let props = ['active','inactive', 'approved', 'pending'];
let result = arr.map(a =>{
props.forEach(prop=> a[prop] = a[prop] || 0);
return a;
});
console.info(result);
не могли бы вы указать свои попытки в вопросе? Спасибо.