#javascript #arrays
#javascript #массивы
Вопрос:
У меня есть массив объектов, который выглядит как:
const orderp = [{id: "1", items:[{id:"1", Name: "Peter"}, {id:"2", Name: "John"}]}, {id: "2", items:[{id:"1", Name: "Teresa"}, {id:"2", Name: "stephan"}]}, {id: "3", items:[{id:"1", Name: "stuart"}, {id:"2", Name: "Jeny"}]}]
Теперь для этого я пытаюсь создать объединенный массив, который будет иметь только items
значения объектов. Только.
Желаемый результат будет :
const names = [{id:"1", Name: "Peter"}, {id:"2", Name: "John"},{id:"1", Name: "Teresa"}, {id:"2", Name: "stephan"}, {id:"1", Name: "stuart"}, {id:"2", Name: "Jeny"}]
Для этого я попытался:
let names = []
for (order of orderp) {
for(name of order['items']) {
names.push(name)
}
}
Еще одна вещь, которая будет использовать итератор числа:
for(let i =0; i <= orderp.length-1; i ){
}
вот так.
Но есть ли какой-либо способ сделать это?
Спасибо.
Комментарии:
1. Первый фрагмент должен сработать. У вас есть какие-либо ошибки?
Ответ №1:
Вы можете использовать reduce, а внутри обратного вызова использовать concat для объединения массива элементов с массивом аккумуляторов
let data = [{
id: "1",
items: [{
id: "1",
Name: "Peter"
}, {
id: "2",
Name: "John"
}]
}, {
id: "2",
items: [{
id: "1",
Name: "Teresa"
}, {
id: "2",
Name: "stephan"
}]
}, {
id: "3",
items: [{
id: "1",
Name: "stuart"
}, {
id: "2",
Name: "Jeny"
}]
}];
const newData = data.reduce((acc, curr) => {
return acc.concat(curr.items)
}, []);
console.log(newData)
Ответ №2:
Вы можете использовать .flatMap()
для этой цели, см. Документацию:
flatMap()
Метод возвращает новый массив, сформированный путем применения заданной функции обратного вызова к каждому элементу массива, а затем выравнивания результата на один уровень. Он идентичен a, за которымmap()
следует aflat()
, с глубиной 1, но немного более эффективен, чем вызов этих двух методов по отдельности.
Попробуйте выполнить следующее:
const orderp = [{id: "1", items:[{id:"1", Name: "Peter"}, {id:"2", Name: "John"}]}, {id: "2", items:[{id:"1", Name: "Teresa"}, {id:"2", Name: "stephan"}]}, {id: "3", items:[{id:"1", Name: "stuart"}, {id:"2", Name: "Jeny"}]}]
const names = orderp.flatMap(e => e.items)
console.log(names)
Ответ №3:
Это также можно сделать с помощью функции отображения массива
const orderp = [
{ id: '1', items: [ { id: '1', Name: 'Peter' }, { id: '2', Name: 'John' }]},{ id: '2', items: [ { id: '1', Name: 'Teresa' }, { id: '2', Name: 'stephan' } ] },{ id: '3', items: [ { id: '1', Name: 'stuart' }, { id: '2', Name: 'Jeny' } ] }];
let arr = [];
orderp.map((item) => {
if (item['items']) {
if (Object.entries(item['items'].length > 1)) {
Object.entries(item['items']).map((item) => {
arr.push(item[1]);
});
} else {
arr.push(item[1]);
}
}
});
console.log(arr);