#javascript #node.js
#javascript #node.js
Вопрос:
У меня есть следующий массив объектов.
[
{ claimNumber1: 'R12345', checkNumber1: '' },
{ claimNumber2: 'T1234', checkNumber2: 'abcd' },
{ claimNumber3: 'Z4567', checkNumber3: 'qwer' }
]
Используя reduce
, я хочу преобразовать это в приведенное ниже.
{
claimNumber1:'R12345',
checkNumber1:'',
claimNumber2:'T1234',
checkNumber2:'',
claimNumber3:'Z4567',
checkNumber3:'',
}
Я попробовал ниже, но не получил того, что ожидал.
.reduce((obj, item) =>{
return {...obj,item}
} ,{});
Комментарии:
1. Просто используйте
Object.assign(...arr)
Ответ №1:
Вы должны распространить item
объект, потому item
что это объект
const arr = [
{ claimNumber1: "R12345", checkNumber1: "" },
{ claimNumber2: "T1234", checkNumber2: "abcd" },
{ claimNumber3: "Z4567", checkNumber3: "qwer" },
];
const result = arr.reduce((obj, item, i) => {
return { ...obj, ...item, [`checkNumber${i 1}`]: "" };
}, {});
console.log(result);
Комментарии:
1. еще раз взгляните на результат, который требуется для операции.
2. @Andy Отредактированный ответ, спасибо за отзыв
Ответ №2:
Почти есть. Вам просто нужно spread
item
также.
.reduce((obj, item) => {
return {
...obj,
...item,
};
}, {});
Комментарии:
1. Как вы различаете ключи в этом примере?
Ответ №3:
Я думаю, вам следует распространить каждый элемент в reducer. Вот мой код.
const res = arr.reduce((prev, item) => {
return { ...prev, ...item };
}, {});
И результат
{
claimNumber1: 'R12345',
checkNumber1: '',
claimNumber2: 'T1234',
checkNumber2: 'abcd',
claimNumber3: 'Z4567',
checkNumber3: 'qwer'
}
Комментарии:
1. Это не тот результат, который требуется для операции.
Ответ №4:
Я не уверен в преимуществе использования reduce
в этой ситуации. Простой цикл был бы самодокументируемым и его было бы легче читать.
const data = [
{ claimNumber1: 'R12345', checkNumber1: '' },
{ claimNumber2: 'T1234', checkNumber2: 'abcd' },
{ claimNumber3: 'Z4567', checkNumber3: 'qwer' }
];
const out = {};
// For every object in the array
for (const obj of data) {
// Get an array of its keys and iterate over them
for (const key of Object.keys(obj)) {
// If it's a claim add that value to the output
// object property, otherwise set that property value
// to an empty string.
if (key.startsWith('claim')) {
out[key] = obj[key];
} else {
out[key] = '';
}
}
}
console.log(out);
Дополнительная документация