与Angular 2中的Java Script Array进行JSON数组元素比较

时间:2017-12-13 18:46:23

标签: arrays json angular object if-statement

我正在使用类型脚本处理Angular 2,并提出了一个非常奇怪的问题。 我有一个名为empIds的数字数组为

empIds = {1,5,6,9,2}

我有一个名为empDetails的(一个JSON数组)(请注意employeeId在这里是字符串)

empDetails [{"employeeId":"1","employeeName":"Jhon"},
            {"employeeId":"2","employeeName":"Ron"},
            {"employeeId":"3","employeeName":"Van"}]

现在我必须找出数字数组中唯一ID匹配的JSON对象。 这是我写的

for(let i=0;i<empDetails.length;i++){
if(empIds.indexOf(empDetails[i].employeeId)==0 ){
//Employee ID is present save that JSON object to some other JSON Array
i should get details for matched id (1 and 2)
}else{
//Did not match
do nothing
}
}

我确实为if和else设置了console.log。我的循环永远不会匹配它总是去其他条件? 有没有可能的解决方案?

3 个答案:

答案 0 :(得分:1)

代码逻辑不正确。检查索引是否大于-1 应该如下

 let empIds = [1, 5, 6, 9, 2];
    let empDetails = [{ "employeeId": 1, "employeeName": "Jhon" },
    { "employeeId": 2, "employeeName": "Ron" },
    { "employeeId": 3, "employeeName": "Van" }]
    for (let i = 0; i < empDetails.length; i++) {
      if (empIds.indexOf(empDetails[i].employeeId) > -1) {
        console.log("found");
        console.log(empDetails[i])
      }
    }

答案 1 :(得分:0)

const newArray = empDetails.filter(item => empIds.includes(item.employeeId));

我认为这是一个很好的方法来获取一个新数组,其中包含 empDetails empIds employeeId 的所有对象。< / p>

.includes()=&gt;如果 empIds 包含employeeId

,则返回true或false

.filter()=&gt;返回包含调用中所有对象的对象

empIds = [2];

empDetails = [{"employeeId":1,"employeeName":"Jhon"},
            {"employeeId":2,"employeeName":"Ron"},
            {"employeeId":3,"employeeName":"Van"}]

使用我的代码,新数组就是这个

[{"employeeId":2,"employeeName":"Ron"}]

因为只有employeeId = 2在empIds表中

答案 2 :(得分:0)

var filtered = empDetails.filter( (e) => empIds.indexOf(parseInt(e.employeeId)) >= 0 );

如果您不关心对Internet Explorer的支持,您也可以使用includes()(请参阅Hopless的回答)