Добавить дополнительные ключи объекта в массив на основе условия javascript

Мой массив:

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

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

Я пробовал использовать карту, но не знаю, как задать условие.

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

не могли бы вы указать свои попытки в вопросе? Спасибо.

NewToJS 01.09.2018 09:12

Хорошо, подождите........

Mohamed Sameer 01.09.2018 09:14
jsbin.com/yimebifoci/edit?js,output
Mohamed Sameer 01.09.2018 09:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
3
973
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

  • Создайте объект со свойствами со значениями по умолчанию.
  • Используйте .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; }

Ресурсы:

  • Array.prototype.map()
  • Object.assign()

Вы можете использовать .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);

Другие вопросы по теме