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

获取对象数组键值遇TypeError求助:undefined is not an object

问题描述

尝试获取对象数组的键值时,能成功获取长度和项的键,但获取索引对应内容时抛出错误:TypeError: undefined is not an object (evaluating 'Object.keys(tasks[0])')

数据结构

{"task1": [{"en": [Array]}, {"ku": [Array]}], "task2": [{"en": [Array]}, {"ku": [Array]}]}

测试代码与结果

代码1(成功获取键)

useEffect(() => {
  const checkIfCorrect = newData.map((data) => {
    return data.map((dataItems) => {
      return dataItems.map((tasks, i) => {
        return console.log(Object.keys(tasks)); // <-----
      });
    });
  });
}, [newData]);

输出:

["task1", "task2"]

代码2(成功获取长度)

useEffect(() => {
  const checkIfCorrect = newData.map((data) => {
    return data.map((dataItems) => {
      return dataItems.map((tasks, i) => {
        return console.log(Object.keys(tasks).length); // <-----
      });
    });
  });
}, [newData]);

输出:

2

代码3(报错)

useEffect(() => {
  const checkIfCorrect = newData.map((data) => {
    return data.map((dataItems) => {
      return dataItems.map((tasks, i) => {
        return console.log(Object.keys(tasks[0])); // <-----
      });
    });
  });
}, [newData]);

错误信息:

TypeError: undefined is not an object (evaluating 'Object.keys(tasks[0])')
问题原因与解决方法

从输出结果能明确看出,tasks本身是包含task1、task2的对象,不是数组。你写tasks[0]是把它当成数组去取索引0的元素,但对象没有数字索引,所以tasks[0]返回undefined,调用Object.keys()自然会报错。

如果想获取task1或task2对应数组里的元素键,要通过对象的键名访问,比如:

useEffect(() => {
  const checkIfCorrect = newData.map((data) => {
    return data.map((dataItems) => {
      return dataItems.map((tasks, i) => {
        // 获取task1数组第一个元素的键
        console.log(Object.keys(tasks.task1[0]));
        // 或者遍历所有task下的元素键
        Object.values(tasks).forEach(taskArr => {
          taskArr.forEach(item => {
            console.log(Object.keys(item));
          })
        });
      });
    });
  });
}, [newData]);

另外注意:你嵌套了三层map,可以检查下newData的实际结构是否真的需要这么多层遍历——从当前输出看,tasks已经是最外层目标对象,可能newData多了两层不必要的数组包裹,可根据实际结构简化遍历逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:10:30