Проверьте, существует ли пара ключ-значение в каждом объекте массива

#javascript #node.js #arrays #json #object

#javascript #node.js #массивы #json #объект

Вопрос:

У меня есть следующие данные json :

 {
  records:{
          data:{
              current:{
                     records:{
                        '2years':[{a:1, b:2, flag:true},
                                  {a:2, b:4},
                                  {a:3, b:5, flag:true},
                                  {a:4, b:2}]
                     }
              }
          }
  }
}
  

У меня есть два объекта как flag_true={} и flag_false={}

Я хочу перебрать массив «2 года» и проверить flag:true , существует ли он или нет в каждом объекте.

Если она существует, я хочу поместить объект из массива 2years в объект flag_true, иначе он перейдет во flag_false.

Конечный результат должен быть

 {
flag_true:[{a:1, b:2, flag:true},
           {a:3, b:5, flag:true}]
flag_false:[{a:2, b:4},
            {a:4, b:2} ]
}
  

Обратите внимание, что

Ключ «текущий» является динамическим и может быть либо «текущим», либо «предыдущим»

То же самое с именем массива..Это может быть «3 года», «4 года», а также

Как я могу это сделать в javascript?

пожалуйста, помогите. заранее спасибо

Комментарии:

1. Вы пробовали обычный цикл и if оператор?

2. Что вы пробовали до сих пор, чтобы решить это самостоятельно? Уже есть несколько вопросов о том, как работать с объектами, имеющими динамические имена свойств.

3. Я пробовал Objects.keys(), но я не получаю результата

Ответ №1:

 function convertRecord(array) {
    return array.reduce((obj, el) => {
        obj[el.flag ? 'flag_true' : 'flag_false'].push(el);
        return obj;
    }, {
        flag_true: [],
        flag_false: []
    })
}

const data = {
  records:{
          data:{
              current:{
                     records:{
                        '2years':[{a:1, b:2, flag:true},
                                  {a:2, b:4},
                                  {a:3, b:5, flag:true},
                                  {a:4, b:2}],
                                  
                        '3years':[{a:1, b:2, flag:true},
                                  {a:2, b:4},
                                  {a:3, b:5, flag:true},
                                  {a:4, b:2}]
                     }
              }
          }
  }
}

for(const key in data.records.data.current.records) {
  data.records.data.current.records[key] = convertRecord(data.records.data.current.records[key]);
}

console.log(data);  

Комментарии:

1. Как можно выполнить итерацию по объекту для доступа к массиву

2. @RoDev Я добавил пример итерации с использованием for в ответ

3. @ Darth: ключ ‘current’ является динамическим.. Он также может быть «предыдущим»… Также будет только один массив, а не несколько массивов

4. @RoDev Поэтому используйте for..in для data.records.data

5. не могли бы вы уточнить… Я не получил