[英]Compare 2 array and form a new array based on values from both arrays?
比較兩個數組,根據名稱與百分比和天數組成一個數組。 我已經完成了 map function 但有些重復。 請提供更好的解決方案。
const a = [{cname: 'a'},{cname: 'b'},{cname: 'c'},{cname: 'd'},{cname: 'e'},{cname: 'f'},{cname: 'g'},{cname: 'h'},{cname: 'i'},{cname: 'j'},{cname: 'k'},{cname: 'l'},{cname: 'm'}]
const b = [{name: 'a', percentage: 10, days: 20, template: 'abc', id: '1'}, {name: 'e', percentage: 11, days: 21, template: 'cde', id: '2'}, {name: 'm', percentage: 12, days: 22, template: 'ghi', id: '3'}]
result = [{name: 'a', percentage: 10, days: 20, template: 'abc', id: '1'},{name: 'b', percentage: 0, days: 0, template: '', id: ''},{name: 'c', percentage: 0, days: 0, template: '', id: ''},{name: 'd', percentage: 0, days: 0, template: '', id: ''}, {name: 'e', percentage: 11, days: 21, template: 'cde', id: '2'},{name: 'f', percentage: 0, days: 0, template: '', id: ''},{name: 'g', percentage: 0, days: 0, template: '', id: ''},{name: 'h', percentage: 0, days: 0, template: '', id: ''},{name: 'i', percentage: 0, days: 0, template: '', id: ''},{name: 'j', percentage: 0, days: 0, template: '', id: ''},{name: 'k', percentage: 0, days: 0, template: '', id: ''},{name: 'l', percentage: 0, days: 0, template: '', id: ''}, {name: 'm', percentage: 12, days: 22, template: 'ghi', id: '3'}],
const result = [];
a.filter(el => {
b.filter(elm => {
if (el.cname === elm.name) {
result.push(elm);
} else {
result.push({
percentage: 0,
name: el.cname,
days: 0,
template: '',
id: ''
})
}
})
})
console.log(result)
首先將a
數組分組為由 ID 索引的 object(或 Map),其中 object 的值是模板( percentage: 0
等)與name
屬性相結合。 然后遍歷另一個數組,如果有匹配的名稱,則合並到關聯的 object 上:
const a = [{cname: 'a'},{cname: 'b'},{cname: 'c'},{cname: 'd'},{cname: 'e'},{cname: 'f'},{cname: 'g'},{cname: 'h'},{cname: 'i'},{cname: 'j'},{cname: 'k'},{cname: 'l'},{cname: 'm'}] const b = [{name: 'a', percentage: 10, days: 20, template: 'abc', id: '1'}, {name: 'e', percentage: 11, days: 21, template: 'cde', id: '2'}, {name: 'm', percentage: 12, days: 22, template: 'ghi', id: '3'}] const template = { percentage: 0, days: 0, template: '', id: '' }; const grouped = Object.fromEntries(a.map(item => [item.cname, { name: item.cname, ...template }])); for (const item of b) { if (grouped[item.name]) { Object.assign(grouped[item.name], item); } } console.log(Object.values(grouped));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.