Javascript 根据动态传递的属性从对象数组中获取唯一值

Javascript 根据动态传递的属性从对象数组中获取唯一值,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,在这个场景中,我需要根据动态传递的属性获取所有对象的唯一值。我尝试过以下方法,但似乎不起作用 var arr = [ { id: "1", type: "x", source: { val1: "3", val2: "4", val3: "6", }, }, { id: "1", type: "x", source: { val1: "3", val2: "4",

在这个场景中,我需要根据动态传递的属性获取所有对象的唯一值。我尝试过以下方法,但似乎不起作用

var arr = [
  {
    id: "1",
    type: "x",
    source: {
      val1: "3",
      val2: "4",
      val3: "6",
    },
  },
  {
    id: "1",
    type: "x",
    source: {
      val1: "3",
      val2: "4",
      val3: "6",
    },
  },
  {
    id: "1",
    type: "x",
    source: {
      val1: "4",
      val2: "5",
      val3: "6",
    }
  }
];

现在假设我通过val1,它应该给我唯一的值3,4,如果我通过val2,它应该给我4,5。 注意:我将只传递源属性中存在的参数

我尝试过的方法:

 calculate = (param) =>
 {
   let uniqueValues = Array.from(
        new Set(arr.map((arr: any) => arr[param]))
   );
 }

看起来,您还需要
source
属性

new Set(arr.map((o: any) => o.source[param]))

您可以使用
map
获取源值,然后
减少
inque值:

const arr=[
{
id:“1”,
键入:“x”,
资料来源:{
val1:“3”,
val2:“4”,
val3:“6”,
},
},
{
id:“1”,
键入:“x”,
资料来源:{
val1:“3”,
val2:“4”,
val3:“6”,
},
},
{
id:“1”,
键入:“x”,
资料来源:{
val1:“4”,
val2:“5”,
val3:“6”,
}
}
];
函数计算(数据,参数){
返回data.map(x=>{
返回(x.source |{})[param];
}).减少((acc,val)=>{
如果(附件索引值(val)=-1)
加速推力(val);
返回acc;
}, []);
}
控制台日志(计算(arr,“val1”);

控制台日志(计算(arr,“val2”)数据的结构将始终相同,也可以不同。