我有带字符串的 JS 数组,例如:
var strArray = [ "q", "w", "w", "e", "i", "u", "r"];
我需要比较数组中的重复字符串,如果存在重复的字符串,则应该有指向该字符串的警告框。
我试图将它与for
循环进行比较,但我不知道如何编写代码以便数组检查自己的字符串是否重复,而无需预先确定要比较的字符串。
我有带字符串的 JS 数组,例如:
var strArray = [ "q", "w", "w", "e", "i", "u", "r"];
我需要比较数组中的重复字符串,如果存在重复的字符串,则应该有指向该字符串的警告框。
我试图将它与for
循环进行比较,但我不知道如何编写代码以便数组检查自己的字符串是否重复,而无需预先确定要比较的字符串。
该findDuplicates
函数(如下)将数组中所有项目的索引与同一项目第一次出现的索引进行比较。如果索引不同,则将其作为重复项返回。
let strArray = [ "q", "w", "w", "w", "e", "i", "u", "r"];
let findDuplicates = arr => arr.filter((item, index) => arr.indexOf(item) != index)
console.log(findDuplicates(strArray)) // All duplicates
console.log([...new Set(findDuplicates(strArray))]) // Unique duplicates
function checkIfDuplicateExists(arr) {
return new Set(arr).size !== arr.length
}
var arr = ["a", "a", "b", "c"];
var arr1 = ["a", "b", "c"];
console.log(checkIfDuplicateExists(arr)); // true
console.log(checkIfDuplicateExists(arr1)); // false
var strArray = [ "q", "w", "w", "e", "i", "u", "r", "q"];
var alreadySeen = [];
strArray.forEach(function(str) {
if (alreadySeen[str])
alert(str);
else
alreadySeen[str] = true;
});
我从你的原件中添加了另一个副本,只是为了表明它会找到一个非连续的副本。
带有箭头功能的更新版本:
const strArray = [ "q", "w", "w", "e", "i", "u", "r", "q"];
const alreadySeen = [];
strArray.forEach(str => alreadySeen[str] ? alert(str) : alreadySeen[str] = true);
您可以将 aSet
和过滤器过滤到已经看到的值。
var array = ["q", "w", "w", "e", "i", "u", "r"],
seen = array.filter((s => v => s.has(v) || !s.add(v))(new Set));
console.log(seen);
在数组上使用一些函数:如果数组中的任何一项从头开始的索引号不等于从末尾开始的索引号,则该项目在数组中存在多次。
// vanilla js
function hasDuplicates(arr) {
return arr.some( function(item) {
return arr.indexOf(item) !== arr.lastIndexOf(item);
});
}