亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數組中具有相似鍵/值的對象轉換為該數組中的數組

如何將數組中具有相似鍵/值的對象轉換為該數組中的數組

Cats萌萌 2023-11-12 15:23:21
我目前有一個對象數組,其中一些具有重復的鍵值,特別是本示例中的國家/地區鍵。我試圖將該數組中具有相同國家/地區值的所有對象加入到該對象數組本身的數組中。const objects = [  { name: 'name1', url: 'name1.com', country: 'IT' },  { name: 'name2', url: 'name2.com', country: 'IT' },  { name: 'name3', url: 'name3.com', country: 'IT' },  { name: 'name4', url: 'name4.com', country: 'IT' },  { name: 'name5', url: 'name5.com', country: 'IT' },  { name: 'name6', url: 'name6.com', country: 'CN' },  { name: 'name7', url: 'name7.com', country: 'CN' },  { name: 'name8', url: 'name8.com', country: 'CN' },  { name: 'name9', url: 'name9.com', country: 'AL' },  { name: 'name10', url: 'name10.com', country: 'CZ' },  { name: 'name11', url: 'name11.com', country: 'CZ' },  { name: 'name12', url: 'name12.com', country: 'GB' },  { name: 'name13', url: 'name13.com', country: 'GB' },  { name: 'name14', url: 'name14.com', country: 'GB' },  { name: 'name15', url: 'name15.com', country: 'GB' },  { name: 'name16', url: 'name16.com', country: 'TR' },  { name: 'name17', url: 'name17.com', country: 'MN' },];因此,理想情況下,我希望上面的對象數組看起來像這樣,其中類似的對象被分組到該數組內的一個數組中,包括沒有重復國家/地區的對象,我也希望它們位于自己的數組中:const newArrayofArrayofObjects = [  [    { name: 'name1', url: 'name1.com', country: 'IT' },    { name: 'name2', url: 'name2.com', country: 'IT' },    { name: 'name3', url: 'name3.com', country: 'IT' },    { name: 'name4', url: 'name4.com', country: 'IT' },    { name: 'name5', url: 'name5.com', country: 'IT' }  ],  [    { name: 'name6', url: 'name6.com', country: 'CN' },    { name: 'name7', url: 'name7.com', country: 'CN' },    { name: 'name8', url: 'name8.com', country: 'CN' }  ],  [{ name: 'name9', url: 'name9.com', country: 'AL' }],  [    { name: 'name10', url: 'name10.com', country: 'CZ' },    { name: 'name11', url: 'name11.com', country: 'CZ' }  ],沒有完全實現我想要的,感謝任何幫助。
查看完整描述

2 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

您可以將對象與同一組的對象分組。


const

    objects = [{ name: 'name1', url: 'name1.com', country: 'IT' }, { name: 'name2', url: 'name2.com', country: 'IT' }, { name: 'name3', url: 'name3.com', country: 'IT' }, { name: 'name4', url: 'name4.com', country: 'IT' }, { name: 'name5', url: 'name5.com', country: 'IT' }, { name: 'name6', url: 'name6.com', country: 'CN' }, { name: 'name7', url: 'name7.com', country: 'CN' }, { name: 'name8', url: 'name8.com', country: 'CN' }, { name: 'name9', url: 'name9.com', country: 'AL' }, { name: 'name10', url: 'name10.com', country: 'CZ' }, { name: 'name11', url: 'name11.com', country: 'CZ' }, { name: 'name12', url: 'name12.com', country: 'GB' }, { name: 'name13', url: 'name13.com', country: 'GB' }, { name: 'name14', url: 'name14.com', country: 'GB' }, { name: 'name15', url: 'name15.com', country: 'GB' }, { name: 'name16', url: 'name16.com', country: 'TR' }, { name: 'name17', url: 'name17.com', country: 'MN' }],

    grouped = Object.values(objects.reduce((r, o) => {

        (r[o.country] ??= []).push(o);

        return r;

    }, {}));


console.log(grouped);

.as-console-wrapper { max-height: 100% !important; top: 0; }


通過按 排序數據country,或者至少將所有相同的國家/地區分組在一起,您可以檢查前一個國家/地區并創建一個新組。


const

    objects = [{ name: 'name1', url: 'name1.com', country: 'IT' }, { name: 'name2', url: 'name2.com', country: 'IT' }, { name: 'name3', url: 'name3.com', country: 'IT' }, { name: 'name4', url: 'name4.com', country: 'IT' }, { name: 'name5', url: 'name5.com', country: 'IT' }, { name: 'name6', url: 'name6.com', country: 'CN' }, { name: 'name7', url: 'name7.com', country: 'CN' }, { name: 'name8', url: 'name8.com', country: 'CN' }, { name: 'name9', url: 'name9.com', country: 'AL' }, { name: 'name10', url: 'name10.com', country: 'CZ' }, { name: 'name11', url: 'name11.com', country: 'CZ' }, { name: 'name12', url: 'name12.com', country: 'GB' }, { name: 'name13', url: 'name13.com', country: 'GB' }, { name: 'name14', url: 'name14.com', country: 'GB' }, { name: 'name15', url: 'name15.com', country: 'GB' }, { name: 'name16', url: 'name16.com', country: 'TR' }, { name: 'name17', url: 'name17.com', country: 'MN' }],

    grouped = objects.reduce((r, o, i, a) => {

        if (!i || a[i -1].country !== o.country) r.push([]);

        r[r.length - 1].push(o);

        return r;

    }, []);


console.log(grouped);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反對 回復 2023-11-12
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

您可以使用Map 對象按國家/地區對數據進行分組。

const objects = [

? { name: 'name1', url: 'name1.com', country: 'IT' },

? { name: 'name2', url: 'name2.com', country: 'IT' },

? { name: 'name3', url: 'name3.com', country: 'IT' },

? { name: 'name4', url: 'name4.com', country: 'IT' },

? { name: 'name5', url: 'name5.com', country: 'IT' },


? { name: 'name6', url: 'name6.com', country: 'CN' },

? { name: 'name7', url: 'name7.com', country: 'CN' },

? { name: 'name8', url: 'name8.com', country: 'CN' },


? { name: 'name9', url: 'name9.com', country: 'AL' },


? { name: 'name10', url: 'name10.com', country: 'CZ' },

? { name: 'name11', url: 'name11.com', country: 'CZ' },


? { name: 'name12', url: 'name12.com', country: 'GB' },

? { name: 'name13', url: 'name13.com', country: 'GB' },

? { name: 'name14', url: 'name14.com', country: 'GB' },

? { name: 'name15', url: 'name15.com', country: 'GB' },


? { name: 'name16', url: 'name16.com', country: 'TR' },

? { name: 'name17', url: 'name17.com', country: 'MN' },

];

const map = new Map();

objects.forEach((x) => {

? const key = x.country;

? if (map.has(key)) map.set(key, [...map.get(key), x]);

? else map.set(key, [x]);

});

const ret = [...map.values()];

console.log(ret);



查看完整回答
反對 回復 2023-11-12
  • 2 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號