You need to enable JavaScript to run this app. 如何从JSON响应数组中提取按title去重的唯一元素数组?
优惠活动
大模型
产品
解决方案
定价
更多

如何从JSON响应数组中提取按title去重的唯一元素数组?

问题原因与修复方案

核心问题定位

  • 循环边界设置错误:原循环终止条件为i < data.length - 1,循环最远只遍历到倒数第二个元素,最后一个元素的title永远不会被纳入比较和推入逻辑,因此会丢失最后一个唯一元素
  • 循环条件修改后的报错原因:将循环改为i < data.length后,当i遍历到最后一个元素(即i = data.length - 1)时,代码会尝试访问data[i + 1].title,此时i + 1超出数组有效索引范围,data[i+1]为undefined,读取undefined的title属性就会触发运行报错
  • 逻辑与需求不匹配:原函数最终返回的是stack.length,如果你需要获取去重后的数组本身,需要将返回值调整为stack

原逻辑的适用前提

你当前的相邻比较逻辑,仅适用于数组已经按title值排序、相同title连续排列的场景,如果数组中相同title没有连续出现,逐位相邻比较的方式会出现重复值被推入数组的问题

可落地的修复方案

方案1:兼容原有相邻比较逻辑的修复

如果能保证数组已经按title排序好,可以避开越界访问,同时完整遍历所有元素:

const getPendingList = (data) => {
  if (!data || data.length === 0) return [];
  const stack = [];
  // 推入第一个元素的title作为初始值
  stack.push(data[0].title);
  // 从第二个元素开始遍历,和上一个入栈的title比较
  for (let i = 1; i < data.length; i++) {
    if (data[i].title !== stack[stack.length - 1]) {
      stack.push(data[i].title);
    }
  }
  console.log('stack', stack);
  return stack;
}

方案2:无需依赖排序的通用去重方案

如果数组没有按title排序,直接用内置的去重逻辑实现,代码更简洁且无越界风险:

const getPendingList = (data) => {
  if (!data) return [];
  // 提取所有title值,用Set自动去重后转回数组
  const stack = [...new Set(data.map(item => item.title))];
  console.log('stack', stack);
  return stack;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 16:06:03