我正在使用类型脚本处理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。我的循环永远不会匹配它总是去其他条件? 有没有可能的解决方案?
答案 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的回答)