首页 > 解决方案 > 在打字稿中的一组对象上展开运算符

问题描述

我正在尝试用它spread operator来找到一个独特的集合

let obj = {
  requests: [{
      id: 'p1',
      isOptional: false,
      item: [Object]
    },
    {
      id: 'p1',
      isOptional: false,
      item: [Object]
    }
  ]
};

// I tried below.
let output = [...new Set(obj.requests)];
console.log(output);

但这没有用。

标签: javascripttypescript

解决方案


你可以从这里得到你的问题的答案How to get distinct values from a array of objects in JavaScript? . 下面是解释为什么它没有像你预期的那样工作。

除非它们都有参考,否则您无法unique objects使用 using找到。所以在你的情况下,你似乎有两个不同的内部数组。从而将返回。SetobjectsamereferencesobjectsSet2 values

如果你同时拥有same referenceobjects 例如 let o = {id: 'p1',isOptional: false,item: [Object]})和 let obj = {requests: [o,o]}那么它将返回唯一值.

您可以在Set下面的屏幕截图中进行验证。 在此处输入图像描述

考虑下面的示例。

let o = {
  id: 'p1',
  isOptional: false,
  item: {
    id: 10
  }
};

let obj = {
  requests: [o, o]
}

let output = [...new Set(obj.requests)];
console.log('Output with unique reference');
console.log(output);

let o2 = {
  id: 'p1',
  isOptional: false,
  item: {
    id: 10
  }
};

let obj2 = {
  requests: [o, o2]
}
let output2 = [...new Set(obj2.requests)];
console.log('Output with different references');
console.log(output2);


推荐阅读