遍历对象以仅获取唯一键

时间:2018-03-23 12:22:22

标签: javascript object key

我有一个对象数组:

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]

6 个答案:

答案 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]

https://jsfiddle.net/6ozdqsuw/2/

答案 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)
)