为了账号安全,请及时绑定邮箱和手机立即绑定

如何将数组中具有相似键/值的对象转换为该数组中的数组

如何将数组中具有相似键/值的对象转换为该数组中的数组

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 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信