在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