gpt4 book ai didi

javascript - 按两个数组中包含的值过滤 JSON 数组 (javascript)

转载 作者:行者123 更新时间:2023-11-30 14:22:46 25 4
gpt4 key购买 nike

我正在编写一个基于多个条件的 JSON 数组过滤器函数。
过滤器取决于两个数组:1. 第一个包含的值必须是搜索到的 JSON 的一部分,并且2. 第二个包含可选值。

我的意思是仅返回包含 obligatory 数组中所有值的数组条目以及 optional 数组中的至少一项。

这是我的尝试:

const searchKeys = ['varWord', 'varTrans', 'varSpec'],
obligatory = ['trip', 'pret'],
optional = ['greet', 'lco', 'toto', 'bene'];

function filterByUpdate(obligatory, optional, file) {
return _.filter(file, item => {
return _.some(optional, opt => {
return _.every(obligatory, oblg => {
return _.some(item, value => {
return _.some(searchKeys, n => item[n].toLowerCase().includes(oblg.toLowerCase())) &&
searchKeys.some(n => item[n].toLowerCase().includes(opt.toLowerCase()))
})
});
});
});
}

上面的代码应该只保留以下数据数组中的第一个条目:

[{
"varSpec": "trip",
"varTrans": "pret",
"varWord": "greet",
"stringPol": "group",
"stringDva": "groupGend",
"stringGit": "/tax",
}, {
"varSpec": "trip",
"varTrans": "pret",
"varWord": "friend",
"stringPol": "N",
"stringDva": "N",
"stringGit": "N",
}, {
"varSpec": "group1",
"varTrans": "grp1",
"varWord": "ageGroup1",
"stringPol": "N",
"stringDva": "N",
"stringGit": "N",
}]

最佳答案

你可以使用这个非常简单的算法:

const { flow, intersection, pick } = require('lodash/fp');

data.filter(
flow(
pick(searchKeys),
entry => intersection(Object.values(entry)),
intersectWith => intersectWith(obligatory).length === obligatory.length &&
intersectWith(optional).length >= 1
)
);

它基本上归结为检查数据集(data),另一方面:

  1. 强制值数组:交集必须是obligatory.length长度。
    :它包含所有来自强制性集合的项目
  2. 值的可选数组:交集数组的长度必须是>= 1
    :它包含来自可选集合的至少 1

这是一个指向 working repl 的链接.

关于javascript - 按两个数组中包含的值过滤 JSON 数组 (javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52467989/

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