#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. не могли бы вы уточнить… Я не получил