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

JS遍历数组对象:去重排序后原数组未更新的问题

问题分析与解决方案

核心原因

你遇到的问题本质是:for...of循环里的list_obj是原数组子元素的引用副本,当你执行list_obj = 新数组时,只是改变了这个局部变量的指向,并没有修改arr_lists中原数组元素的引用,所以原数组不会被更新。

解决方法

方法1:通过索引直接修改原数组

直接操作arr_lists的索引位置,把处理后的数组赋值回去:

arr_lists = [arr_1, arr_2, arr_3, arr_4, arr_5, ...]

for (let i = 0; i < arr_lists.length; i++) {
  let processed = arr_lists[i].join().split(',').filter(onlyUnique);
  processed.sort();
  arr_lists[i] = processed;
  Logger.log(processed);
}

方法2:使用map生成处理后的新数组

如果不需要修改原数组,而是生成全新的处理后数组,map是更简洁的写法:

const processedArrLists = arr_lists.map(list => {
  let processed = list.join().split(',').filter(onlyUnique);
  processed.sort();
  Logger.log(processed);
  return processed;
});

// 若需要覆盖原数组,直接赋值即可:
// arr_lists = processedArrLists;

方法3:修改原数组内容(不替换数组对象)

如果要保留原数组对象的引用,可先清空原数组,再重新添加处理后的元素:

arr_lists = [arr_1, arr_2, arr_3, arr_4, arr_5, ...]

for (let list of arr_lists) {
  let processed = list.join().split(',').filter(onlyUnique);
  processed.sort();
  // 清空原数组
  list.length = 0;
  // 批量添加处理后的元素
  list.push(...processed);
  Logger.log(list);
}

内容的提问来源于stack exchange,提问作者J. Erik Hartel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:45:33