gpt4 book ai didi

Javascript:使用 lodash 进行多个匹配的 JSON

转载 作者:行者123 更新时间:2023-12-03 07:38:13 36 4
gpt4 key购买 nike

假设我有一个如下所示的数组:

var users = [{
users : [{
user :'harry'
}, {
user : 'potter'
}, {
user : 'jinny'
}, {
user : 'weasly'
}],
age : 36,
active : true
}, {
users : [{
user : 'brad'
}, {
user : 'pit'
}, {
user : 'angelena'
}, {
user : 'joly'
}],
age : 40,
active : false
}];

由此,我想根据条件用户选择可以匹配多个值的对象

例如,如果名字是 harryangelena,则输出将变为:

{
users : [{
user : 'harry'
},{
user : 'potter'
}, {
user : 'jinny'
}, {
user : 'weasly'
}],
age : 36,
active : true
}, {
users : [{
user : 'brad'
} ,{
user : 'pit'
}, {
user : 'angelena'
}, {
user : 'joly'
}],
age : 40,
active : false
}

如果名字是 harry,输出将变为:

{
users : [{
user : 'harry'
}, {
user : 'potter'
}, {
user : 'jinny'
}, {
user : 'weasly'
}],
age : 36,
active : true
}

我知道lodash filter with matches可以用于此目的,但我不知道如何将其应用于此案例。

是否有任何 javaScript 或 jQuery 解决方案可以解决此问题?

最佳答案

这是一个可能的解决方案:

function search(usersCollection, targets) {
return _.filter(usersCollection, function (usersObj) {
return _.intersection(targets, _.map(usersObj.users, 'user')).length > 0;
});
}

用法:

search(users, ['harry', 'angelena'])
/* => [{ 'users': [{user:'harry'},{user:'potter'},{user:'jinny'},{user:'weasly'}], 'age': 36, 'active': true },
{ 'users': [{user:'brad'},{user:'pit'},{user:'angelena'},{user:'joly'}], 'age': 40, 'active': false }] */
search(users, ['harry'])
/* => [{ 'users': [{user:'harry'},{user:'potter'},{user:'jinny'},{user:'weasly'}], 'age': 36, 'active': true }] */
search(users, ['severus'])
/* => [] */
search(users, [])
/* => [] */

它的工作原理是首先从每个用户组中仅提取名称(使用 _.map)并查找与 相同的名称,从而过滤 users 集合。要搜索的目标。如果存在共同名称 (.length > 0),则至少已找到一个目标名称,并且特定用户组将包含在结果中。

如果目标/用户列表很长,则此实现可能效率低下。如果这是一个问题,请考虑改进您的数据结构。

关于Javascript:使用 lodash 进行多个匹配的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35520024/

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