【问题标题】:How to return multiple values with the method array.from and new set如何使用方法 array.from 和 new set 返回多个值
【发布时间】:2018-11-21 16:14:42
【问题描述】:

我想知道是否可以使用 array.from new set 方法从对象数组中检索多个唯一值。

例如:

   this.data = [
  {
    "_id": "5bf57b965401169dd81c2a51",
    "age": 35,
    "name": "Paige Zamora",
    "gender": "female",
    "company": "AUTOMON",
    "reference_id": "12"
  },
  {
    "_id": "5bf57b96c2c3b88adff4b972",
    "age": 40,
    "name": "Jennifer Carr",
    "gender": "female",
    "company": "SYNKGEN",
    "reference_id": "11"
  },
  {
    "_id": "5bf57b969dd839926db78767",
    "age": 38,
    "name": "Weaver Rosales",
    "gender": "male",
    "company": "ETERNIS",
    "reference_id": "10"
  },
  {
    "_id": "5bf57b968c845ea691e76c84",
    "age": 31,
    "name": "Myers Pickett",
    "gender": "male",
    "company": "ETERNIS",
    "reference_id": "10"
  },
  {
    "_id": "5bf57b96998c44eff083d3fa",
    "age": 36,
    "name": "Dona Nicholson",
    "gender": "female",
    "company": "ETERNIS",
    "reference_id": "10"
  }
]

我想检索以下唯一值:reference_id 以及与 reference_id 关联的 company,这将给出:

[{12, AUTOMON}, {11, SYNKGEN}, {10, ETERNIS}]

我想我会用这个方法:

const list = Array.from (new Set (this.data.map ({reference_id}) => reference_id)));

返回什么:

[12,11,10]

不知道这个方法能不能像上面的列表那样返回多个值?

【问题讨论】:

  • {12, AUTOMON} 没有意义。如果这些是键,值是什么?如果这应该是一个数组,则使用[...],而不是{...}

标签: javascript arrays typescript


【解决方案1】:

您可以将JSON 与所需数据一起使用,然后将解析后的值作为结果。

你可能会问,为什么是字符串而不是对象。这里的问题是每个具有所需属性的新对象都是一个新对象,而不是相同的。

Set 使用单个原语或对象并检查对象的引用是否相同。通过获取一个字符串,可以检查该值并在集合中获得唯一的字符串。这需要将 JSON 转换回对象。

var data = [{ _id: "5bf57b965401169dd81c2a51", age: 35, name: "Paige Zamora", gender: "female", company: "AUTOMON", reference_id: "12" }, { _id: "5bf57b96c2c3b88adff4b972", age: 40, name: "Jennifer Carr", gender: "female", company: "SYNKGEN", reference_id: "11" }, { _id: "5bf57b969dd839926db78767", age: 38, name: "Weaver Rosales", gender: "male", company: "ETERNIS", reference_id: "10" }, { _id: "5bf57b968c845ea691e76c84", age: 31, name: "Myers Pickett", gender: "male", company: "ETERNIS", reference_id: "10" }, { _id: "5bf57b96998c44eff083d3fa", age: 36, name: "Dona Nicholson", gender: "female", company: "ETERNIS", reference_id: "10" }],
    unique = Array.from(
        new Set(
            data.map(({ reference_id, company }) =>
                JSON.stringify({ reference_id, company }))
        ),
        json => JSON.parse(json)
    );
    
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 这真是一件美事
  • 感谢@Nina Scholz 的回复。
【解决方案2】:

您还可以将它们分组到 Map 中(忽略任何重复,其中键是 reference_idcompany 的字符串表示形式)并从其值返回一个数组:

var data = [{
    "_id": "5bf57b965401169dd81c2a51",
    "age": 35,
    "name": "Paige Zamora",
    "gender": "female",
    "company": "AUTOMON",
    "reference_id": "12"
  },
  {
    "_id": "5bf57b96c2c3b88adff4b972",
    "age": 40,
    "name": "Jennifer Carr",
    "gender": "female",
    "company": "SYNKGEN",
    "reference_id": "11"
  },
  {
    "_id": "5bf57b969dd839926db78767",
    "age": 38,
    "name": "Weaver Rosales",
    "gender": "male",
    "company": "ETERNIS",
    "reference_id": "10"
  },
  {
    "_id": "5bf57b968c845ea691e76c84",
    "age": 31,
    "name": "Myers Pickett",
    "gender": "male",
    "company": "ETERNIS",
    "reference_id": "10"
  },
  {
    "_id": "5bf57b96998c44eff083d3fa",
    "age": 36,
    "name": "Dona Nicholson",
    "gender": "female",
    "company": "ETERNIS",
    "reference_id": "10"
  }
];


var res = Array.from(data.reduce((acc, {reference_id, company}) => {
  acc.set(`${reference_id},${company}`, {reference_id, company});
  return acc;
}, new Map()).values());

console.log(res);

【讨论】:

  • 感谢@slider 的回复。
【解决方案3】:

试试这个:

this.data.map((el) =>{ return {age: el.age, company: el.company} })

// You get this array
//0: {age: 35, company: "AUTOMON"}
//1: {age: 40, company: "SYNKGEN"}
//2: {age: 38, company: "ETERNIS"}
//3: {age: 31, company: "ETERNIS"}
//4: {age: 36, company: "ETERNIS"}

{12, AUTOMON} 没有意义,obj 是 { key: value, key: value...}

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多