检查数组中的多个数字

时间:2019-05-26 17:52:31

标签: javascript arrays loops

我需要创建一个检查数组中所有数字并将其打印出来的函数。 我的想法与此类似:

  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 3
3 6
3 67
. .
6 3
6 6
6 67
. .

我想过要创建一个if语句来检查array [i]是否等于array [j],然后将内容推入新的字符串中。

2 个答案:

答案 0 :(得分:1)

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

如果找到重复项,则将值推入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);

答案 1 :(得分:0)

您还可以将SetArray.filterArray.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)