Javascript如果属性与列表匹配,如何使用json数组上的array.filter返回整个数组

时间:2018-03-23 02:22:38

标签: javascript json

我需要有关如何过滤数组的帮助,

在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" }]
    }];

4 个答案:

答案 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()

见下文:

&#13;
&#13;
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;
&#13;
&#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;