我需要创建一个检查数组中所有数字并将其打印出来的函数。 我的想法与此类似:
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],然后将内容推入新的字符串中。
答案 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)
您还可以将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)
。