You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历对象数组筛选miles属性值,代码返回空数组问题排查

问题:筛选符合条件的航班城市却返回空数组

我需要从航班对象数组中筛选出符合以下条件的城市:

  • 航班出发地与用户的出发地一致
  • 目的地的miles值小于等于用户的miles值
  • 将符合条件的city属性存入数组返回

但当前代码返回空数组,以下是我的代码、预期结果和实际结果:

let flights = [{origin: 'AEP', destinations:[{city: 'PARIS', miles: 500}, {city: 'BOLZANO', miles: 200}, {city: 'DUBAI', miles: 400}]}, {origin: 'MXP', destinations: [{city: 'SAINT-TROPEZ', miles:  30}]},{origin: 'AEP', destinations: [{city: 'LISBON', miles: 30}, {city: 'MADRID', miles: 700}, {city: 'NICE', miles: 200}]}]

let user = {
   name: 'Elena',
   miles: 450,
   origin: 'AEP'
}

我的函数代码:

function closureTrip(flights){
    let list = [];
    let array = [];

        return function(user) {
            for (let i = 0; i < flights.length; i++) {
                if (flights[i].origin === user.origin) {
                    list.push(flights[i].destinations);

                    for (let j = 0; j < list.length; j++){
                        if(list[j].miles <= user.miles){
                            array.push(list[j].city);
                        }
                        return array
                    }
                }
            }
        }
}
  • 预期结果:closureTrip(flights)(user) => [ 'BOLZANO', 'DUBAI', 'LISBON', 'NICE' ]
  • 实际结果:closureTrip(flights)(user) => []

问题原因

  1. 数组嵌套处理错误:flights[i].destinations本身是数组,你用list.push(flights[i].destinations)会把整个数组作为元素存入list,导致list[j]是数组而非单个目的地对象,自然没有miles和city属性。
  2. 过早返回结果:内层循环第一次迭代后就直接return array,不仅没完成所有遍历,而且第一次循环时list[j]是数组,条件不满足,所以返回空数组。
  3. 变量作用域污染:list和array定义在外部函数,多次调用返回的函数时会保留之前的结果,导致数据混乱。

修正后的代码

基础循环版本

function closureTrip(flights){
    return function(user) {
        const result = [];
        // 遍历所有航班
        for (const flight of flights) {
            // 匹配出发地
            if (flight.origin === user.origin) {
                // 遍历当前航班的所有目的地
                for (const dest of flight.destinations) {
                    // 筛选里程符合条件的城市
                    if (dest.miles <= user.miles) {
                        result.push(dest.city);
                    }
                }
            }
        }
        return result;
    }
}

数组方法简洁版本

function closureTrip(flights){
    return function(user) {
        return flights
            // 筛选出发地匹配的航班
            .filter(flight => flight.origin === user.origin)
            // 提取所有目的地数组并合并为一维数组
            .flatMap(flight => flight.destinations)
            // 筛选里程符合条件的目的地
            .filter(dest => dest.miles <= user.miles)
            // 提取城市名称
            .map(dest => dest.city);
    }
}

调用closureTrip(flights)(user)会返回预期的[ 'BOLZANO', 'DUBAI', 'LISBON', 'NICE' ]。

内容的提问来源于stack exchange,提问作者Andres Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:42:54