簡體   English   中英

比較 2 個數組並根據 arrays 的值形成一個新數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM