Добавить дополнительные ключи объекта в массив на основе условия JavaScript - PullRequest
0 голосов
/ 01 сентября 2018

Мой массив:

[
  {
    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
  }
]

Как это сделать?

Я пытался с картой, но я не знаю, как установить условие.

Я хочу установить значения в ноль.

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Вы можете использовать .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.log(arr);
0 голосов
/ 01 сентября 2018

Вы можете использовать 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.log(result);
0 голосов
/ 01 сентября 2018
  • Создание объекта со свойствами со значениями по умолчанию.
  • Используйте .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.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...