Javascript如何在json数组上使用array.filter在属性与列表匹配时返回整个数组
我需要关于如何筛选数组的帮助 在用户\u数组中,我有一些数组,我必须在这些数组中比较Javascript如何在json数组上使用array.filter在属性与列表匹配时返回整个数组,javascript,json,Javascript,Json,我需要关于如何筛选数组的帮助 在用户\u数组中,我有一些数组,我必须在这些数组中比较标题\u info.sap\u number是否与有效的\u sap\u number数组中的任何内容匹配 如果该属性值与有效的\u sap\u数字数组中的任何内容匹配 它将保留该数组及其父数组,然后删除所有与有效的\u sap\u number数组中的任何值不匹配的其他数组,我不知道如何正确解释它,请参见我的示例,谢谢 我有这样的数组 var valid_sap_number = ['1','2'] var u
标题\u info.sap\u number
是否与有效的\u sap\u number数组
中的任何内容匹配
如果该属性值与有效的\u sap\u数字数组中的任何内容匹配
它将保留该数组及其父数组,然后删除所有与有效的\u sap\u number数组中的任何值不匹配的其他数组,我不知道如何正确解释它,请参见我的示例,谢谢
我有这样的数组
var valid_sap_number = ['1','2']
var user_array =
[{
"name":"User1",
"header_info": [{ "sap_number":"1" }],
"footer_info": [{ "site":"ABC" }]
}],
[{
"name":"User2",
"header_info": [{ "sap_number":"2" }],
"footer_info": [{ "site":"ABCD" }]
}],
[{
"name":"User3",
"header_info": [{ "sap_number":"3" }],
"footer_info": [{ "site":"ABC" }]
}];
/* This is my spaghetti code */
const result = user_array.filter(user => function(a,b){
for(i = 0; i < valid_sap_number.length; i++)
{
if(b.header_info[0].sap_number == valid_sap_number[i]){
return true;
}
}
});
console.log(result);
您可以在filter函数中使用arrayincludes
函数来检查当前项是否与值列表中的任何项匹配
const result = user_array.filter(user => {
return valid_sap_number.includes(user[0].header_info[0].sap_number);
});
首先,您的user\u数组
看起来不是有效的数组(没有完整的包装器)
在这种情况下,您可以使用.filter()
见下文:
var valid\u sap\u number=['1','2']
变量用户_数组=[
[{
“名称”:“User1”,
“标题信息”:[{“sap编号”:“1”}],
“页脚信息”:[{“站点”:“ABC”}]
}],
[{
“名称”:“用户2”,
“标题信息”:[{“sap编号”:“2”}],
“页脚信息”:[{“站点”:“ABCD”}]
}],
[{
“名称”:“User3”,
“标题信息”:[{“sap编号”:“3”}],
“页脚信息”:[{“站点”:“ABC”}]
}]
];
const result=user\u array.filter(a=>有效的\u sap\u编号。包括(a[0]。header\u info[0]。sap\u编号))
根据您的评论,我认为您可以临时修改JSON结构。目前的结构有些误导,不符合您的要求
提案:
user_array = [
{
"name" : "User1",
"header_info": {
"sap_number": 1,
//... other properties of header_info
},
"footer_info" : {
"site" : "ABC",
//... other properties of footer_info
}
},
{
"name" : "User2",
"header_info": {
"sap_number": 2,
//... other properties of header_info
},
"footer_info" : {
"site" : "ABCE",
//... other properties of footer_info
}
}
]
然后做一个像这样的过滤器
user_array.filter( user => valid_sap_number.includes(user.header_info.sap_number));
你能给我解释一下这段代码吗?有效的\u sap\u编号。包括(一个[0]。标题信息[0]。sap\u编号))为什么设置为[0]?它是如何通过设置[0]来检查3个数组键的,它工作了,但我没有得到它,谢谢,!基本上,include()。这里的a
是您的user\u数组
单项目表示形式(很抱歉,我没有使用有意义的名称),现在根据您的结构,a
是数组中的另一个数组,我们希望它只有一个项目,所以我指定只获取[0]
。与header\u info
相同,因为您也将其设置为数组,所以我只需要获取第一个索引,即[0]
谢谢您bryan,我忘了我将其设置为数组,再次感谢您,当子数组类似于[{“sap\u number”:1},{“sap\u number”:3}]
@DRB每个header\u info只有一个sap\u编号时会发生什么情况,但是它可能有其他属性,我不知道这种数组结构是否合适,我有大约100个属性,这就是为什么我这样分组它。非常感谢。谢谢,它成功了,你能解释一下它是如何返回整个数组的吗?只需检查有效的\u sap\u编号是否包括(用户[0]。标题\u信息[0]。sap\u编号)我以为它只会返回一个有效的\u sap\u编号,谢谢,我可以调整属性并删除数组,但我想我将很难让我的用户使用这种格式,因为我将不得不调整我添加的每个对象和数组映射,以及我对数据所做的许多处理,谢谢你的建议,我希望我可以要求你更多地简化我代码的其他部分,谢谢,
user_array = [
{
"name" : "User1",
"header_info": {
"sap_number": 1,
//... other properties of header_info
},
"footer_info" : {
"site" : "ABC",
//... other properties of footer_info
}
},
{
"name" : "User2",
"header_info": {
"sap_number": 2,
//... other properties of header_info
},
"footer_info" : {
"site" : "ABCE",
//... other properties of footer_info
}
}
]
user_array.filter( user => valid_sap_number.includes(user.header_info.sap_number));