为了账号安全,请及时绑定邮箱和手机立即绑定

检查数组中的多个数字

检查数组中的多个数字

慕勒3428872 2021-06-07 17:57:30
我需要创建一个函数来检查数组中的所有数字并将它们打印出来。我的想法与此类似:  var array = [15,22,88,65,79,19,93,15,90,38,77,10,22,90,99];   var string = "";  var len = array.length;声明变量后,我开始循环它们:  for (var i = 0; i < len; i ++) {     for (var j = 0; j < len; j ++) {        //console.log(array[i], array[j]);     }  }控制台按以下顺序打印我的值:3 33 63 67. .6 36 66 67. .我想创建一个 if 语句,检查 array[i] 是否等于 array[j] 然后将内容推送到一个新字符串中。
查看完整描述

2 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

您需要在外循环中迭代,直到最后一项之前的元素和内循环中从实际索引加一开始,以防止检查相同的元素。


如果发现重复,将值推送到duplicates数组。


var array = [15, 22, 88, 65, 79, 19, 93, 15, 90, 38, 77, 10, 22, 90, 99],

    len = array.length,

    i, j,

    duplicates = [];


for (i = 0; i < len - 1; i++) {

  for (j = i + 1; j < len; j++) {

    if (array[i] === array[j]) duplicates.push(array[i]);

  }

}


console.log(duplicates);

使用更短的方法 Set


var array = [15, 22, 88, 65, 79, 19, 93, 15, 90, 38, 77, 10, 22, 90, 99],

    found = new Set,

    duplicates = array.filter(v => found.has(v) || !found.add(v));


console.log(duplicates);


查看完整回答
反对 回复 2021-06-11
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您还可以将 Set与Array.filter和Array.indexOf 一起使用:


let data = [15,22,88,65,79,19,93,15,90,38,77,10,22,90,99]


let r = new Set(data.filter((v, i, a) => a.indexOf(v) !== i))


console.log(Array.from(r))

这个想法是将项目过滤到找到多个索引的项目,然后将它们添加到集合中。由于 Set 仅存储唯一项目,因此它会处理重复项并获得最终结果。

我们利用 Array.filter 为 iteratee 函数提供 3 个参数 - value (v),当前index (i)和实际的事实array (a)


查看完整回答
反对 回复 2021-06-11
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信