如何使用JavaScript从对象数组中获取唯一键值?

4

我有一个像这样的json数据

{
  "name":"John",
  "age":30,
  "cars":"BMW"
},
{
  "name":"Micheal",
  "age":30,
  "cars":"Ford"
},
{
  "name":"Andy",
  "age":29,
  "cars":"Ford"
}

我希望能够从类似于以下数组中获取汽车的唯一值:
cars = ["BMW, Ford"];

该问题似乎没有任何尝试来解决问题。StackOverflow希望您首先尝试解决自己的问题,因为您的尝试可以帮助我们更好地理解您的需求。请编辑问题以展示您所尝试的内容,以便说明您遇到了一个具体的障碍[MCVE]。欲了解更多信息,请参见[ask]并进行[tour]。 - CertainPerformance
3
首先,从所有的cars中创建一个数组,然后使用Set类获取唯一值! - vrintle
谢谢,我已经得到答案了 :) - Arun Karthick
4个回答

8
您可以使用 Set 来获取唯一值。

var array = [{ name: "John", age: 30, car: "BMW" }, { name: "Micheal", age: 30, car: "Ford" }, { name: "Andy", age: 29, car: "Ford" }],
    cars = Array.from(new Set(array.map(({ car }) => car)));

console.log(cars);

通过使用辅助函数,你可以将数据和所需的关键字交出去。

const
    getUniqueValues = (data, key) => Array.from(new Set(array.map(({ [key]: value }) => value))),
    array = [{ name: "John", age: 30, car: "BMW" }, { name: "Micheal", age: 30, car: "Ford" }, { name: "Andy", age: 29, car: "Ford" }];

console.log(...getUniqueValues(array, 'name'));
console.log(...getUniqueValues(array, 'car'));


嗨,Nina,有没有办法将这个函数转换成帮助函数?export const filterByUniqueValues = (key, data) => { return Array.from(new Set(data.map(({key}) => key))) };我知道key参数已经声明了,但是它的值从来没有被读取过。 - HelpANoobOut
1
@HelpANoobOut,你需要解构一个计算属性并将此变量重命名为其句柄。请参见上面添加的代码。 - Nina Scholz

3

使用Array.map方法获取所有汽车价值,并使用Array.filter方法过滤重复的汽车价值,可以通过链接连写Array.map().filter()实现。

var arr = [{
    "name": "John",
    "age": 30,
    "cars": "BMW"
  },
  {
    "name": "Micheal",
    "age": 30,
    "cars": "Ford"
  },
  {
    "name": "Andy",
    "age": 29,
    "cars": "Ford"
  }
];

var carValues = arr.map( (value) => value.cars).filter( (value, index, _arr) => _arr.indexOf(value) == index);
console.log(carValues);


2
你需要使用 Array.map() 将每个对象映射到键 cars,并使用 Array.filter() 来删除重复项。
var cars = arr.map(ele => ele.cars).filter((ele, i, arr) => arr.indexOf(ele) == i);

var arr = [{
  "name":"John",
  "age":30,
  "cars":"BMW"
},
{
  "name":"Micheal",
  "age":30,
  "cars":"Ford"
},
{
  "name":"Andy",
  "age":29,
  "cars":"Ford"
}];

var cars = arr.map(ele => ele.cars).filter((ele, i, arr) => arr.indexOf(ele) == i);
console.log(cars);

您也可以使用ES5。

var res = arr.map(function(ele){
  return ele.cars
}).filter(function(ele, i, arr){
  return arr.indexOf(ele) == i
});

0
假设数据是一个数组,只需像这样遍历数组:
var arr = [{
  "name":"John",
  "age":30,
  "cars":"BMW"
},
{
  "name":"Micheal",
  "age":30,
  "cars":"Ford"
},
 {
  "name":"Andy",
  "age":29,
  "cars":"Ford"
}];
 var cars = [];
arr.forEach(function(car) {
    if (!cars.includes(car["cars"]) {
        cars.push(car["cars"]);
    }
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接