我有一个对象数组:
let array1 = [
{ age: 20, name: "bob" },
{ age: 24, name: "Mike" },
{ age: 20, name: "Penny" },
{ age: 24, name: "Jeff" },
{ age: 25, name: "Mary" }
];
尝试找到一个forLoop或forEach的示例,它将循环遍历对象数组,并仅返回我将推送到另一个数组的唯一年龄键([20, 24, 25]
)。
预期结果值为:
[20, 24, 25]
答案 0 :(得分:2)
使用es6套装可以在一行中完成。
let res = [...new Set(array1.map(e => e.age))];
说明:
array1.map(e => e.age)
将仅通过返回.age值返回原始数组的副本,因此结果将为:[20,24,20,24,25]
。
new Set(array1.map(e => e.age))
将从上面的数组中创建一个唯一的集合,因此它将是Set
个实例,会自动删除重复项。
...new Set
< - 扩展运算符(...
)将上述集转换为数组。相应的结果将是[20,24,25]
。
答案 1 :(得分:1)
如果您希望以标准数组结束,我建议您获取所有年龄的实例,然后转换为Set并再次返回。
首先只获取年龄键的条目以获得一系列年龄。
const allAges = originalArray.map(({ age }) => age)
然后从年龄创建一个集合:
const ageSet = new Set(allAges)
然后转换回你想要的数组:
const uniqueAges = [...ageSet]
如果你想要一行:
const uniqueAges = [...new Set(originalArray.map(({ age }) => age))]
答案 2 :(得分:0)
这样的东西?
let result = [];
array1.forEach(e=>{
if (result.indexOf(e.age) === -1) {
result.push(e.age)
}
})
答案 3 :(得分:0)
我不确定你的意思是什么" unique" 但是,如果使用过滤器,则可以获得仅包含年龄键的新数组:
let filtered = array1.map(elem => elem.age)
更多信息here:
答案 4 :(得分:0)
你的问题正是ES6 Set
的目的!
使用Set
,您可以添加您喜欢的任何元素,但只有当它们不在时才会添加到该集合中。
let array1 = [
{
name: "bob",
age: 20,
},
{
name: "Mike",
age: 24,
},
{
name: "Penny",
age: 20,
},
{
name: "Jeff",
age: 24,
},
{
name: "Mary",
age: 25,
},
]
let ages = new Set()
array1.forEach(user => {
ages.add(user.age)
})
//ages = Set [ 20, 24, 25 ]
答案 5 :(得分:0)
根据我对该问题的理解,这是一个使用内置Array迭代器方法的功能解决方案。
map
会返回一个只有年龄的数组(例如:[20, 24, 20, 24, 25]
),filter
会删除重复数据。
let array1 = [
{
name: "bob",
age: 20,
},
{
name: "Mike",
age: 24,
},
{
name: "Penny",
age: 20,
},
{
name: "Jeff",
age: 24,
},
{
name: "Mary",
age: 25,
},
]
console.log(
array1
.map(({age}) => age)
.filter((age, i, arr) => arr.lastIndexOf(age) === i)
)