gpt4 book ai didi

javascript - 通过 object.property 将数组过滤为唯一对象

转载 作者:行者123 更新时间:2023-11-30 11:39:28 26 4
gpt4 key购买 nike

我想要实现的是过滤 objects 数组,以便我得到一个包含 unique actors 的对象数组。

这就是我目前拥有的:

var objects = [{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
name: "name",
openid: null
},
capture: 'value'
},
{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec12345",
name: "name2",
openid: null
},
capture: 'value2'
},
{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
name: "name",
openid: null
},
capture: 'value3'
}
];


objects.filter((value, index, self) => {
return self.indexOf(value) === index;
}).map(ele => {
console.log(ele.capture);
});

期望的结果是一个不包含最后一个数组元素的数组,因为此 actor 属性与第一个数组元素匹配。

但是如您所见,目前它不会过滤任何数组元素。

起初我以为 return self.indexOf(value.value) === index; 会解决这个问题,然而这会返回一个空数组。

预期的结果是:

[{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
name: "name",
openid: null
},
capture: 'value'
},
{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec12345",
name: "name2",
openid: null
},
capture: 'value2'
}
];

最佳答案

数组中的对象都是不同的对象,即使有些对象碰巧具有具有相同值的属性。 .indexOf() 函数正在比较引用,而不是属性值。

此外,在实践中,这三个对象都没有相同的属性,因为它们都有不同的 .capture 值。

使用.findIndex()而不是 .indexOf(),这样您就可以比较属性以找到匹配的对象:

objects.filter((value, index, self) => {
return self.findIndex(v => v.actor.name === value.actor.name) === index;
})

这里我只使用了 .actor.name 属性,但如果需要,您当然可以比较其他属性。

(请注意 .findIndex() 是一个 ES6 函数,但我认为这很好,因为您的代码已经在使用箭头函数。或者您可以 polyfill it 。)

var objects = [{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
name: "name",
openid: null
},
capture: 'value'
},
{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec12345",
name: "name2",
openid: null
},
capture: 'value2'
},
{
actor: {
account: null,
degraded: false,
mbox: null,
mbox_sha1sum: "843c56da78f9eb888274d2d4e12ab1d748ec46234",
name: "name",
openid: null
},
capture: 'value3'
}
];


objects.filter((value, index, self) => {
return self.findIndex(v => v.actor.name === value.actor.name) === index;
}).map(ele => {
console.log(ele.capture);
});

关于javascript - 通过 object.property 将数组过滤为唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com