我需要一些建议或最好的方法来使用传递的值将其数组数据过滤器。 目前,我有
let arrayobject = [
{"name": "apple", "type": "juice-material", "srnum": 123234},
{"name": "cranberry", "type": "desert-material", "srnum": 98989},
{"name": "grapes", "type": "wine-material", "srnum":656565}]
如果我通过了apple
,那么返回数组将是
[{"name": "apple", "type": "juice-material", "srnum": 123234}]
如果我通过了wine-material
返回结果
{"name": "grapes", "type": "wine-material", "srnum":656565}
与 srnum 类似,传递它时会给出过滤器数组对象结果。
目前,
我尝试过使用
_.some(arrayobject, _.unary(_.partialRight(_.includes, passedValue)))
它给出了上下文结果,但不可预测。
让我知道过滤数据的最佳方法。 谢谢。
最佳答案
嗯,我认为你的方法几乎是最好的。但是,您使用 _.some
如果任何项目匹配,如果您将其与 _.filter
交换,则只会给出 bool 结果您可以获得所有匹配的项目,也可以更改为 _.find
只获取第一个:
let arrayobject = [
{"name": "apple", "type": "juice-material", "srnum": 123234},
{"name": "cranberry", "type": "desert-material", "srnum": 98989},
{"name": "grapes", "type": "wine-material", "srnum": 656565}
]
function filterByValues(collection, whatToSearchFor) {
//separating just for easier readability
let predicate = _.unary(_.partialRight(_.includes, whatToSearchFor));
return _.filter(collection, predicate);
}
//matches a value
console.log(filterByValues(arrayobject, "apple"));
console.log(filterByValues(arrayobject, "wine-material"));
console.log(filterByValues(arrayobject, 98989));
//doesn't match a key
console.log(filterByValues(arrayobject, "name"));
console.log(filterByValues(arrayobject, "type"));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
话虽如此,@georg 在评论中指出,您可以使用更少的 Lodash 功能来重写此代码,而只需使用 _.includes
进行简单的回调即可。 - 这可能比使用_.partialRight
和_.unary
更具可读性:
let arrayobject = [
{"name": "apple", "type": "juice-material", "srnum": 123234},
{"name": "cranberry", "type": "desert-material", "srnum": 98989},
{"name": "grapes", "type": "wine-material", "srnum": 656565}
]
function filterByValues(collection, whatToSearchFor) {
//separating just for easier readability
let predicate = item => _.includes(item, whatToSearchFor);
return _.filter(collection, predicate);
}
//matches a value
console.log(filterByValues(arrayobject, "apple"));
console.log(filterByValues(arrayobject, "wine-material"));
console.log(filterByValues(arrayobject, 98989));
//doesn't match a key
console.log(filterByValues(arrayobject, "name"));
console.log(filterByValues(arrayobject, "type"));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
关于javascript - 在数组对象中、在选定的键中过滤搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803665/