在javascript对象中查找匹配值

在javascript对象中查找匹配值,javascript,Javascript,让flightInfo={ userInputFlightNumber:'KL856', }; const xhr2=新的XMLHttpRequest; 常量url2=https://api.myjson.com/bins/11uvvr'; xhr2.onreadystatechange=函数(){ if(xhr2.readyState==XMLHttpRequest.DONE){ 让converTimetableToObject=JSON.parse(xhr2.response); conso

让flightInfo={
userInputFlightNumber:'KL856',
};
const xhr2=新的XMLHttpRequest;
常量url2=https://api.myjson.com/bins/11uvvr';
xhr2.onreadystatechange=函数(){
if(xhr2.readyState==XMLHttpRequest.DONE){
让converTimetableToObject=JSON.parse(xhr2.response);
console.log(converTimetableToObject);
让resultArray=converTimetableToObject.response.flight.filter(函数(){
返回(converTimetableToObject.response.flight.iata_number==flightInfo.userInputFlightNumber);
});
console.log(resultArray);
log(flightInfo.userInputFlightNumber);
console.log(converTimetableToObject);
}
}
xhr2.open('GET',url2);
xhr2.send()如果你看看它是如何工作的,它不是你所期望的。在过滤器内部,您应该有一个函数,并将数组元素作为函数的参数。像这样。您还可以通过将参数添加到回调和控制台来查看它的工作方式。记录参数以查看元素当前是什么


arr.filter(e=>返回e.flight.iata_number===flightInfo.userinputfightnumber)

我认为您的数组不正确,因为它有重复的属性名'fligh' 应该是

 var obj='{"response":{"flight": [{ "number": "8421", "iata_number": "AF8421", "icao_number": "AFR8421", "departure_time": "8: 00" }, { "number": "856", "iata_number": "KL856", "icao_number": "KLM856", "departure_time": "10: 00" }, { "number": "5925", "iata_number": "KE5925", "icao_number": "KAL5925", "departure_time": "12: 00" }, { "number": "856", "iata_number": "KL856", "icao_number": "KLM856", "departure_time": "15: 30" }     ]   } }';
然后您可以根据需要应用过滤器

var arr=converTimetableToObject.response.flight;

var filtered=arr.filter(el=> el.iata_number===flightInfo.userInputFlightNumber);

首先,你的JSON是完全无效的

您应该使用数组或对象打开JSON。
文件中的所有项目必须用双引号引起来。
重复键也是非法的,除非在另一个对象或数组下:所有的“飞行”:{}键不起作用,但是里面的各种键都可以,因为它们是通过不同的对象引用的。(因此您的ConvertimatableToObject.response.flight.iata_编号与每个条目都匹配。)
逗号位于每个对象的末尾,但单个对象或数组中的最后一个对象除外。(您的国际民航组织号码后没有,但您的出发时间后有。)

这就是JSON的外观:

{
"response": {
    "flight": [{
            "number": "8421",
            "iata_number": "AF8421",
            "icao_number": "AFR8421",
            "departure_time": "8: 00"
        },
        {
            "number": "856",
            "iata_number": "KL856",
            "icao_number": "KLM856",
            "departure_time": "10: 00"
        },
        {
            "number": "5925",
            "iata_number": "KE5925",
            "icao_number": "KAL5925",
            "departure_time": "12: 00"
        },
        {
            "number": "856",
            "iata_number": "KL856",
            "icao_number": "KLM856",
            "departure_time": "15: 30"
        }
    ]
}
}
然后,您必须通过for循环处理航班阵列,以检索所有iata_编号

大概是这样的:

xhr2.onreadystatechange = function(){
  let resultArray = [];
  let flight = converTimetableToObject.response.flight;
  let lastFlight = flight.length;
  for (let i = 0; i < lastFlight; i++) {
    if (flight[i].iata_number == flightInfo.userInputFlightNumber) {
      resultArray.push(flight[i].iata_number) // push adds a new item to an existing array
    }
  }
  // do something with resultArray
}
xhr2.onreadystatechange=function(){
设resultArray=[];
让flight=converTimetableToObject.response.flight;
让lastFlight=flight.length;
for(设i=0;i

编辑:我想您可以使用
过滤器执行某些操作,但该函数对我来说是新函数,因此请遵循其他函数的示例。

假设
userInputFlightNumber
具有有效值,则过滤器应该可以工作。请提供一个能再现您的问题的runnable,谢谢!我添加了一个可运行的示例。resultArray保持为空并非我的意思,如下所示:
var filtered=arr.filter(el=>el.iata_number===flightInfo.userinputfightnumber)修复了json文件,并且数组是正确的。数组是空的,我用你修改过的JSON和@Darren的建议对它做了一些修改,现在它可以工作了,我创建了fiddle