gpt4 book ai didi

Javascript - 如何使用数组和对象迭代嵌套数组以及为什么我的代码不起作用?

转载 作者:行者123 更新时间:2023-12-01 02:52:41 26 4
gpt4 key购买 nike

我有一个包含许多嵌套数组和对象的数组。我的代码不起作用,一遍又一遍地查看它后,我不明白为什么。很难解释我的意思(抱歉,如果我的标题问题也不是很清楚,但我不知道如何解释我的意思,如果我不知道我的代码有什么问题),所以我把我的 2问题以评论的形式洞察我的代码 - 我希望它可以理解!非常感谢您的任何想法。

var trips= [{
"Air": {
"OriginDestinationOptions": {
"OriginDestinationOption": [{
"Flight": [{
"DepartureAirport": {
"LocationCode": "JFK"
},
"ArrivalAirport": {
"LocationCode": "SVO"
},
"MarketingAirline": {
"Code": "SU"
}
}, {
"DepartureAirport": {
"LocationCode": "SVO"
},
"ArrivalAirport": {
"LocationCode": "TXL"
},
"MarketingAirline": {
"Code": "SU"
}

},
{
"DepartureAirport": {
"LocationCode": "TXL"
},
"ArrivalAirport": {
"LocationCode": "LHR"
},
"MarketingAirline": {
"Code": "SU"
}

}],
"ElapsedTime": 915
}, {
"Flight": [{
"DepartureAirport": {
"LocationCode": "LHR"
},
"ArrivalAirport": {
"LocationCode": "LAX"
},
"MarketingAirline": {
"Code": "SU"
}
}, {
"DepartureAirport": {
"LocationCode": "LAX"
},
"ArrivalAirport": {
"LocationCode": "TXL"
},
"MarketingAirline": {
"Code": "SU"
}
},
{
"DepartureAirport": {
"LocationCode": "TXL"
},
"ArrivalAirport": {
"LocationCode": "LHR"
},
"MarketingAirline": {
"Code": "SU"
}

}],
"ElapsedTime": 1425
}]
},
"DirectionInd": "Return"
}
},
{
"Air": {
"OriginDestinationOptions": {
"OriginDestinationOption": [{
"Flight": [{
"DepartureAirport": {
"LocationCode": "JFK"
},
"ArrivalAirport": {
"LocationCode": "SVO"
},
"MarketingAirline": {
"Code": "SU"
}
}, {
"DepartureAirport": {
"LocationCode": "SVO"
},
"ArrivalAirport": {
"LocationCode": "LHR"
},
"MarketingAirline": {
"Code": "SU"
}
}],
"ElapsedTime": 915
}, {
"Flight": [{
"DepartureAirport": {
"LocationCode": "LHR"
},
"ArrivalAirport": {
"LocationCode": "SVO"
},
"MarketingAirline": {
"Code": "SU"
}
}, {
"DepartureAirport": {
"LocationCode": "SVO"
},
"ArrivalAirport": {
"LocationCode": "JFK"
},
"MarketingAirline": {
"Code": "SU"
}
}],
"ElapsedTime": 1125
}]
},
"DirectionInd": "Return"
}
}];

我的代码:

var flightObjects = [];

function getAirportNameToLocation(obj) {
var allTrips = [];
for (var i = 0; i < obj.length; i++) {

allTrips.push(obj[i].Air.OriginDestinationOptions.OriginDestinationOption)
}

for (var i = 0; i < allTrips.length; i++) {

var toDestinationFlightsTemp = [];
var returnFlightsTemp = [];
//first FlightsSegment object --> to destination flights
var flightsToLoc = allTrips[i][0];

//second FlightsSegment object --> return flights
var returnFlights = allTrips[i][1];

console.log(toDestinationFlightsTemp)

1.) 当我控制台日志“toDestinationFlights”时,我得到一个空数组,但是当我将 ALSO(与之前的控制台日志相同)toDestinationFlights 推送到我的 FlightObjects 对象并返回该对象时,我得到一个空数组,但下面有 2 行,我实际上没有得到返回一个空数组,但是值。我不知道为什么。

             console.log("test", toDestinationFlightsTemp)
flightObjects.push({

2.) 这里的意图是:toDestinationFlights: toDestinationFlightsTemp.concat(returnFlights[0]) - 我想要来自 toDestinationFlightsTemp 的值和来自 returnFlightsTemp 的第一个值,这不起作用,因为再次,不知何故我得到一个空数组

                 toDestinationFlights: toDestinationFlightsTemp, //This for whatever reason works fine
returnFlights: returnFlightsTemp
})

flightsToLoc.Flight.forEach(function(flightTo, i) {
toDestinationFlightsTemp.push(flightTo.DepartureAirport.LocationCode);
})

returnFlights.Flight.forEach(function(flightTo, i) {
returnFlightsTemp.push(flightTo.DepartureAirport.LocationCode)
})
}
toDestinationFlightsARIVALTemp = toDestinationFlightsTemp.concat(returnFlightsTemp[0]);
}
getAirportNameToLocation(trips)

flightObjects;

最佳答案

这就是您看到看似意外行为的原因:

首先,在函数 flightObjects 之外定义变量。然后你创建一个将运行两次的循环:

for (var i = 0; i < allTrips.length; i++)

然后在该循​​环内初始化一个变量:

var toDestinationFlightsTemp = [];

每次循环都会重新定义它。你console.log它,它仍然是一个空数组,因为你还没有触及它。

接下来,将该空数组推送到全局 flightObjects 上:

flightObjects.push({
toDestinationFlights: toDestinationFlightsTemp, //This for whatever reason works fine
returnFlights: returnFlightsTemp
})

这实际上并不能正常工作 - flightObjects.toDestinationFlights 现在指向与 toDestinationFlightsTemp 相同的空数组。第一次循环时,两者都打印空数组。但是,在对它进行 console.log 编辑之后,您可以向其中添加元素:

 flightsToLoc.Flight.forEach(function(flightTo, i) {
toDestinationFlightsTemp.push(flightTo.DepartureAirport.LocationCode);
})

由于 toDestinationFlightsTempflightObjects.toDestinationFlights 指向同一个数组,因此 toDestinationFlightsTempflightObjects.toDestinationFlights 都有您插入数组的元素。

现在再次循环。在此循环中,您重新定义 toDestinationFlightsTemp 并将其指向一个新的空数组。但 flightObjects 仍然指向同一个数组,并且具有对您第一次通过循环推送的元素的引用。因此,现在当您到达 console.log 时,toDestinationFlightsTemp 为空,但 flightObjects 仍然具有您第一次通过循环推送的元素。因此,当您 console.log 时,您会看到这些内容。

认为如果您在尝试将值插入flightObjects之前将其向上移动,就会发生您打算做的事情:

        flightsToLoc.Flight.forEach(function(flightTo, i) {
toDestinationFlightsTemp.push(flightTo.DepartureAirport.LocationCode);
})

关于Javascript - 如何使用数组和对象迭代嵌套数组以及为什么我的代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com