#javascript #arrays
#javascript #массивы
Вопрос:
Я пытаюсь сделать так, чтобы это array2
выглядело как array1
последовательность. Если какое-либо свойство отсутствует, я хотел бы добавить это свойство в array2
и присвоить значение 0
.
Array1 = ["BREAKFAST", "AM", "LUNCH", "PM", "DINNER"]
Array2 = [
{
daypart: "DINNER",
time: 10,
},
{
daypart: "PM",
time: 15,
},
{
daypart: "LUNCH",
time: 9,
},
]
expectedArray = [
{ daypart: "BREAKFAST", time: 0 },
{ daypart: "AM", time: 0 },
{ daypart: "LUNCH", time: 9 },
{ daypart: "PM", time: 15 },
{ daypart: "DINNER", time: 10 },
]
Ответ №1:
Вы можете использовать Array#map
наряду с Array#find
.
const Array1 = ['BREAKFAST', 'AM', 'LUNCH', 'PM', 'DINNER'],
Array2 = [{
daypart: 'DINNER',
time: 10
},
{
daypart: 'PM',
time: 15
}, {
daypart: 'LUNCH',
time: 9
}];
const res = Array1.map(x => Array2.find(({daypart})=>daypart===x)
?? {daypart: x, time: 0});
console.log(res);
Комментарии:
1. для меня этот ответ плохой, результат содержит ссылки на Array2, а не копии
2. @MisterJojo В вопросе когда-либо указывалось, что требуется копия?
3. @MisterJojo Нет необходимости рассматривать это, если у кого-то нет оснований полагать, что это необходимо. Конечно, в этом нет ничего плохого (в большинстве случаев), но это может быть излишним.
Ответ №2:
Я предлагаю…
const
Array1 = ['BREAKFAST', 'AM', 'LUNCH', 'PM', 'DINNER'],
Array2 =
[ { daypart: 'DINNER', time: 10 }
, { daypart: 'PM', time: 15 }
, { daypart: 'LUNCH', time: 9 }
],
expectedArray = Array1.map(daypart=>
{
let a2el = Array2.find(x=>x.daypart===daypart)
if (!a2el) return {daypart, time: 0}
else return {...a2el} // to make a copy
})
expectedArray.forEach(Ae=>console.log( JSON.stringify(Ae)))
.as-console-wrapper { max-height: 100% !important; top: 0; }
Ответ №3:
Попробуйте этот:
const Array1 = ['BREAKFAST', 'AM', 'LUNCH', 'PM', 'DINNER'];
const Array2 = [
{
daypart: 'DINNER',
time: 10
},
{
daypart: 'PM',
time: 15
},
{
daypart: 'LUNCH',
time: 9
}
];
const result = Array1.map(daypart =>
({ daypart, time: 0, ...Array2.find(e => e.daypart === daypart) })
);
console.log(result);