Arrays 使用另一个JSON数组节点js搜索JSON数组
我正在尝试使用另一个JSON数组条件(filter)过滤JSON数组 这是我的密码:Arrays 使用另一个JSON数组节点js搜索JSON数组,arrays,node.js,Arrays,Node.js,我正在尝试使用另一个JSON数组条件(filter)过滤JSON数组 这是我的密码: function filterArray(object, criteria){ return object.filter(function(obj){ for(var i=0;i<criteria.length;i++){ let criteriaEle = criteria[i]; return Object.keys(criter
function filterArray(object, criteria){
return object.filter(function(obj){
for(var i=0;i<criteria.length;i++){
let criteriaEle = criteria[i];
return Object.keys(criteriaEle).forEach(function(key){
if(obj[key] == criteriaEle[key]){
return obj;
}
})
}
})
}
因此,如果我将这两个数组赋给函数,它应该返回
obj = [{{type:1,company:1,color:0,name:a},{type:1,company:1,color:1,name:e}}]
我不知道我在这方面哪里出了问题。请帮忙
更新:
此外,我不想使用obj.type或obj.company或object.color作为参数进行搜索,因为我想使代码可维护,并且不想在以后添加更多条件时再更新代码
const data=[{type:1,company:1,color:0,name:'a'},{type:2,company:1,color:0,name:'b'},{type:1,company:3,color:0,name:'c'},{type:4,company:1,color:0,name:'d'},{type:1,company:1,name:'e'}];
const-criteria=[{type:1,company:1,color:0},{type:1,company:1,color:1}];
功能检查标准(obj){
返回条件。一些(条件=>{
for(常量输入标准){
if(标准[键]!==obj[键]){
返回false;
}
}
返回true;
});
}
const filtered=data.filter(检查条件);
log('filteredarray:',Filtered)代码>如何使用下划线.js?您可以在此处使用where
功能:@HannahMay它不允许您在语句中使用逻辑OR。很抱歉,我没有写下我希望我的代码可以从配置中配置。所以我不想做“obj.type”或“obj.company”,因为这使我很难维护。@AnuragBhardwaj更新了解决方案。我不熟悉Array.filter,并试图理解如果我必须将criteria对象从data.filter(checkCriteria)传递到函数checkCriteria(obj),我该怎么做?@AnuragBhardwaj您不能更改传递到Array.filter的函数的签名,但是,您可以动态创建函数并选择该函数闭包的一部分。我用另一个片段更新了答案,正是这样做的。请注意,这一次,我不是将函数传递给Array.filter,而是执行一个返回函数的函数。
obj = [{{type:1,company:1,color:0,name:a},{type:1,company:1,color:1,name:e}}]