gpt4 book ai didi

javascript - 如何在lodash中找到过滤后的数组?

转载 作者:行者123 更新时间:2023-12-03 02:33:24 24 4
gpt4 key购买 nike

我正在开发lodash,其中我需要从大数组集合中过滤数据。数组集合是这种类型的数据:

[ { poll_options: [ [Object] ],
responder_ids: [ '5a7189c14615db31ecd54347', '59ffb41f62d346204e0a199b' ],
voted_ids: [ '5a7189c14615db31ecd54347' ],
_id: 5a7878833a1bf4238ddc5cef },
{ poll_options: [ [Object] ],
responder_ids: [ '5a7189c14615db31ecd54347' ],
voted_ids: [ '5a7189c14615db31ecd54347' ],
_id: 5a787756217db51698ea8fd6 } ]

我想过滤其中包含不在 voted_ids 中的 ids 值的数组(即,对于第一个对象,它应该返回此 59ffb41f62d346204e0a199b ,对于第二个集合,它应该返回空数组),这意味着我必须仅返回那些不在 voted_ids 上但在 responder_ids 中的值。我的代码是这样的

_.map(polls,(poll) => {
// console.log(poll.responder_ids)
return _.filter(poll.responder_ids,(responder) => {
return _.find(poll.voted_ids,(voted) => {
return !_.includes(responder,voted)
})

但它不返回过滤数组,而是返回整个集合。我哪里做错了?

现在它的返回结果是这样的......

[ [ '59ffb41f62d346204e0a199b' ], [] ]

我想要单个数组而不是多数组。

最佳答案

您使用_.filter的方式是错误的。

过滤器迭代数组中的所有项目。如果过滤器函数返回true,则该项目将在过滤后的数组中返回,如果返回false,则不会返回该项目。

但是,您返回的是一个数组,其结果为 truthy,因此所有项目都会返回。

你想要的是这样的:

const polls = [
{
poll_options: [ '[Object]' ],
responder_ids: [ '5a7189c14615db31ecd54347', '59ffb41f62d346204e0a199b' ],
voted_ids: [ '5a7189c14615db31ecd54347' ],
_id: '5a7878833a1bf4238ddc5cef'
},
{
poll_options: [ '[Object]' ],
responder_ids: [ '5a7189c14615db31ecd54347' ],
voted_ids: [ '5a7189c14615db31ecd54347' ],
_id: '5a787756217db51698ea8fd6'
}
];

let ids = [];
for (let i = 0; i < polls.length; i++) {
ids = [...ids, ...polls[i].responder_ids.filter(id => {
return !polls[i].voted_ids.includes(id);
})];
}
console.log(ids);

关于javascript - 如何在lodash中找到过滤后的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48639527/

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