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

对象索引0为数组,调用map函数返回undefined,如何正确访问?

问题分析与解决方案

你的代码存在几个核心问题,直接导致obj[0]返回undefined:

  1. 异步逻辑处理错误
    • 你给Promise.all传入的result是普通对象数组,而非Promise数组,Promise.all会直接将这个数组作为resolved结果。但你往空数组promises里push结果的操作是异步执行的,函数却直接返回了空的promises数组——此时异步操作还没触发,obj拿到的自然是空数组,obj[0]也就成了undefined。
  2. 返回值逻辑完全错误
    • 你的目标是返回处理后的result数组,但当前代码错误地返回了一个始终为空的数组,根本没拿到实际数据。

修复后的代码(分两种场景)

场景1:无异步操作(当前代码逻辑无异步需求)

直接返回处理完成的数组即可:

function getRowData() {
    let translationByLang = Object.values(translationArray.reduce((acc, {field, lang, text}) => {
        acc[lang] = acc[lang] || { lang };
        acc[lang][field] = text;
        return acc;
    }, {}));

    let result = translationByLang;

    if (result.length < 2) {
        let obj = {"lang": "en", "name": "Documento mancante", "pdf_url": ""};
        result.push(obj);
    }

    // 直接返回处理好的数组
    return result;
}

const obj = getRowData();
console.log('typeof', typeof obj, ', obj', obj);
// 现在可正常调用map
obj.map(item => {
    console.log(item.lang, item.name);
});

场景2:存在异步操作(比如result元素是Promise)

如果translationArray相关逻辑包含异步操作,或需要处理Promise数组,应返回Promise对象而非空数组:

function getRowData() {
    let translationByLang = Object.values(translationArray.reduce((acc, {field, lang, text}) => {
        acc[lang] = acc[lang] || { lang };
        acc[lang][field] = text;
        return acc;
    }, {}));

    let result = translationByLang;

    if (result.length < 2) {
        let obj = {"lang": "en", "name": "Documento mancante", "pdf_url": ""};
        result.push(obj);
    }

    // 返回Promise.all处理后的Promise对象
    return Promise.all(result);
}

// 通过then或async/await获取结果后再操作
getRowData().then(obj => {
    console.log('typeof', typeof obj, ', obj', obj);
    obj.map(item => {
        console.log(item.lang, item.name);
    });
});

关键总结

  • 同步逻辑里不要错误混用异步操作,避免返回空数组;
  • 无异步需求时,直接返回处理完成的数组;
  • 有异步需求时,返回Promise对象,在异步完成后再调用map等数组方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:05:22