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

JavaScript按指定列筛选数组生成子集及代码报错问题问询

问题根因

  • 死循环是因为内层for循环终止条件写错:你写的for (j=0; selections.length; j++)中,selections.length永远为真值,循环不会终止,自然触发死循环。
  • 注释后报错是因为tableData[i]没有初始化:去掉tableData[i] = toolData[i]后,tableData[i]是undefined,直接给undefined[0]赋值必然触发类型错误。另外原来的tableData[i] = toolData[i]是引用赋值,修改tableData会同步改动原始toolData数据,属于逻辑错误。

正确实现逻辑

你的原始数据是对象数组,列序号对应对象键的排列顺序,所以首先要先拿到首行数据的键列表作为列顺序的基准,再按选中的列序号提取对应值即可,代码如下:

var getData = () => axios.get('toolData.json')
  .then(res => res.data)
  .then(data => {
    const toolData = data;
    console.log(toolData);
    // 可动态修改,支持用户自主选择列
    const selections = [0,1,2,4];
    // 取首行的键作为列顺序基准
    const columnKeys = Object.keys(toolData[0]);
    // 遍历生成结果数组
    const tableData = toolData.map(row => {
      // 要保留键名用对象,要纯数组格式直接写[]即可
      const newRow = {};
      selections.forEach(selIndex => {
        const key = columnKeys[selIndex];
        newRow[key] = row[key];
      })
      return newRow;
    })
    console.log(tableData);
  })

如果需要输出纯数组格式的子集(每一行是值的数组而非对象),把newRow的初始化改成const newRow = [],赋值逻辑改成newRow.push(row[key])即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:18:03