我需要从数组中找到基于2个属性的唯一对象,如下所示.当"class"和"fare"匹配时,我需要提取唯一值并将它们放入结果数组中.
资源:
var arr = [{class:"second", fare: "a"},
{class:"second", fare: "b"},
{class:"first", fare: "a"},
{class:"first", fare: "a"},
{class:"second", fare: "a"},
{class:"first", fare: "c"}
]
Run Code Online (Sandbox Code Playgroud)
预期结果:
var result = [{class:"second", fare: "a"},
{class:"second", fare: "b"},
{class:"first", fare: "a"},
{class:"first", fare: "c"}
]
Run Code Online (Sandbox Code Playgroud)
我查看了SO,并且能够找到基于一个属性过滤的答案(按属性创建唯一对象的数组),但找不到哪个可以基于2个属性.
Nin*_*olz 14
您可以为哈希表构建一个组合键,以过滤给定数组.
var arr = [{ class: "second", fare: "a" }, { class: "second", fare: "b" }, { class: "first", fare: "a" }, { class: "first", fare: "a" }, { class: "second", fare: "a" }, { class: "first", fare: "c" }],
result = arr.filter(function (a) {
var key = a.class + '|' + a.fare;
if (!this[key]) {
this[key] = true;
return true;
}
}, Object.create(null));
console.log(result);Run Code Online (Sandbox Code Playgroud)
小智 8
使用组合键和地图
const array = [
{ class: "second", fare: "a" },
{ class: "second", fare: "b" },
{ class: "first", fare: "a" },
{ class: "first", fare: "a" },
{ class: "second", fare: "a" },
{ class: "first", fare: "c" }
];
console.log(unique(array, ['class', 'fare']));
function unique(arr, keyProps) {
const kvArray = arr.map(entry => {
const key = keyProps.map(k => entry[k]).join('|');
return [key, entry];
});
const map = new Map(kvArray);
return Array.from(map.values());
}Run Code Online (Sandbox Code Playgroud)
Asa*_*af 8
嘿,你可以使用这个方法
const unique = (arr, props = []) => [...new Map(arr.map(entry => [props.map(k => entry[k]).join('|'), entry])).values()];
const array = [
{
class: 'second',
fare: 'a',
},
{
class: 'second',
fare: 'b',
},
{
class: 'first',
fare: 'a',
},
{
class: 'first',
fare: 'a',
},
{
class: 'second',
fare: 'a',
},
{
class: 'first',
fare: 'c',
},
];
const newArr = unique(array, ['class', 'fare']);
console.log(newArr) // [{ class: 'second', fare: 'a' }, { class: 'second', fare: 'b' }, { class: 'first', fare: 'a' }, { class: 'first', fare: 'c' }]
Run Code Online (Sandbox Code Playgroud)