我需要有关如何过滤数组的帮助,
在user_array内部我有数据,我必须比较header_info.sap_number
是否匹配valid_sap_number array
中的任何内容,
如果该属性值与valid_sap_number array
内的任何内容匹配,
它会将该数组与其父数组一起保留,然后删除与valid_sap_number array
中任何值不匹配的所有其他数组,我不知道如何正确解释它,所以请看我的例子,谢谢,
我有这样的数组,
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);
预期产出
result = [{
"name":"User1",
"header_info": [{ "sap_number":"1" }],
"footer_info": [{ "site":"ABC" }]
}],
[{
"name":"User2",
"header_info": [{ "sap_number":"2" }],
"footer_info": [{ "site":"ABCD" }]
}];
答案 0 :(得分:1)
您可以在过滤器函数中使用数组includes
函数来检查当前项是否与值列表中的任何项匹配。
const result = user_array.filter(user => {
return valid_sap_number.includes(user[0].header_info[0].sap_number);
});
答案 1 :(得分:1)
根据您的评论,我认为您可以即兴创作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));
答案 2 :(得分:0)
首先,你的user_array
看起来不是一个有效的数组(没有整个包装)。
您可以在这种情况下使用.filter()
。
见下文:
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" }]
}]
];
const result = user_array.filter(a => valid_sap_number.includes(a[0].header_info[0].sap_number))
&#13;
答案 3 :(得分:0)
foreach (const user of user_array) {
let result = [];
const sapNumber = user.header_info[0].sap_number;
foreach (const valid of valid_sap_number) {
if (valid == sapNumber) {
result.push(user);
}
}
}
user_array = result;