在这种情况下,我需要根据动态传递的属性获取所有对象的唯一值。我尝试了以下方法,但似乎不起作用。
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]))
);
}
答案 0 :(得分:2)
看起来,您还需要source
属性。
new Set(arr.map((o: any) => o.source[param]))
答案 1 :(得分:0)
您可以使用map
来获取源值,然后使用reduce
来获取不正确的值:
const 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",
}
}
];
function calculate(data, param) {
return data.map(x => {
return (x.source || {})[param];
}).reduce((acc, val) => {
if (acc.indexOf(val) === -1)
acc.push(val);
return acc;
}, []);
}
console.log(calculate(arr, "val1"));
console.log(calculate(arr, "val2"));