在ES6中,你可以使用对象解构和Map数据结构来从一个现有对象中创建一个新对象,该新对象只包含一个属性,并且删除任何重复项。以下是一个示例代码:
// 假设我们有一个原始对象数组
const originalArray = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
{ id: 3, name: 'Alice', age: 28 },
{ id: 4, name: 'Charlie', age: 35 }
];
// 我们想要创建一个新对象,其中只包含'name'属性,并且删除重复项
const uniqueNames = {};
originalArray.forEach(item => {
// 使用Map来确保唯一性
if (!uniqueNames.has(item.name)) {
uniqueNames.set(item.name, item);
}
});
// 将Map转换为对象数组
const uniqueNamesArray = Array.from(uniqueNames.values());
console.log(uniqueNamesArray);
这段代码会输出:
[
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
{ id: 4, name: 'Charlie', age: 35 }
]
在这个例子中,我们使用了forEach
循环来遍历原始数组,并使用Map
来存储唯一的name
属性。由于Map
的键是唯一的,这自动帮我们删除了重复的项。最后,我们使用Array.from
方法将Map
的值转换回数组。
这种方法的优势在于它利用了Map
的特性来确保唯一性,这是一个高效且简洁的解决方案。此外,这种方法也易于理解和维护。
如果你想要一个只包含name
属性的新对象,而不是原始对象的副本,你可以稍微修改代码:
const uniqueNamesOnly = Array.from(uniqueNames.values()).map(item => ({ name: item.name }));
console.log(uniqueNamesOnly);
这将输出:
[
{ name: 'Alice' },
{ name: 'Bob' },
{ name: 'Charlie' }
]
在这个修改后的版本中,我们使用map
函数来创建一个只包含name
属性的新对象数组。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云