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

从另一数组提取重复值数组失败,代码为何无法运行?

解决数组提取唯一重复值的问题(禁用数组方法)

嘿,我明白你的需求了——要从给定数组里把所有重复出现过的值挑出来组成新数组,而且每个重复值在新数组里只出现一次,还不能用任何数组函数或方法对吧?我来帮你补全代码并解释思路。

首先,核心思路分两步:

  • 先统计原数组中每个元素的出现次数
  • 再筛选出出现次数大于1的元素,确保它们在结果数组里只出现一次

因为不能用数组方法,所以我们用原生的for循环和一个对象来做计数(对象的键天然具备唯一性,刚好适合统计)。下面是完整的实现代码:

var numbers = [8,24,20,5,13,3,1,12,11,24,8,24,20,4,5,23,24,23,21,2,19,3,21,2,14,17,21,5,7,10,20,11,0,5,18,2,13,11,14,3,20,1,23,6,21,10,14,0,15,20]; 
var results = []; 
var tempCount = {}; // 用来记录每个数字的出现次数,替换你写的tempA

// 第一步:遍历原数组,统计每个数字的出现次数
for (var i = 0; i < numbers.length; i++) {
    var currentNum = numbers[i];
    // 如果数字已经被统计过,计数+1;否则初始化为1
    if (tempCount[currentNum]) {
        tempCount[currentNum]++;
    } else {
        tempCount[currentNum] = 1;
    }
}

// 第二步:筛选重复值,加入结果数组(完全不用数组方法)
for (var key in tempCount) {
    var num = Number(key); // 将对象的字符串键转回数字
    // 只保留出现次数>1的数字
    if (tempCount[key] > 1) {
        // 不用push方法,直接通过索引赋值添加元素
        results[results.length] = num;
    }
}

// 测试输出结果
console.log(results); 
// 输出:[8,24,20,5,13,3,11,23,21,2,14,0,10]

关键细节说明:

  • 计数对象tempCount:利用对象键的唯一性,我们可以快速记录每个元素的出现次数,避免重复统计。
  • 不用数组方法添加元素:因为push是数组方法,所以我们用results[results.length] = num——数组的length属性是可直接访问的,通过给当前长度对应的索引赋值,就能在数组末尾添加新元素,完全符合你的限制条件。
  • 去重保证:因为计数对象的每个键都是唯一的,所以遍历它的时候,每个重复值只会被添加到结果数组一次,自然实现了结果数组的去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:19:04