检查 JavaScript 数组中的重复字符串

IT技术 javascript arrays compare
2021-01-23 00:29:05

我有带字符串的 JS 数组,例如:

var strArray = [ "q", "w", "w", "e", "i", "u", "r"];

我需要比较数组中的重复字符串,如果存在重复的字符串,则应该有指向该字符串的警告框。

我试图将它与for循环进行比较,但我不知道如何编写代码以便数组检查自己的字符串是否重复,而无需预先确定要比较的字符串。

6个回答

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

这不会返回唯一的数组,如果在数组中重复多次,重复项将被多次包含。xxxyyyxxx例如。
2021-03-23 00:29:05

使用 ES6 特性

  • 因为Set中的每个值都必须是唯一的,所以将检查值是否相等。

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);
我可以澄清一些事情吗?上面的表达式是否alreadySeen[str] = true只是将该str项目添加alreadySeen数组中?是一样的alreadySeen.push(str)吗?
2021-03-16 00:29:05
@kshetline 好的,谢谢你的澄清。不过,这对我来说有点太高级了 :) 那个方法有什么特别的吗?我想了解更多
2021-03-26 00:29:05
好东西。这个特殊的逻辑很容易允许“任何”行为(也就是说,当我发现有任何重复时,我可以短路循环)。
2021-04-04 00:29:05
@BenClarke,不,因为推送词添加str为数组的元素,而alreadySeen[str] = true添加str为数组的索引,使用数组作为哈希表。Set在这里可以使用一个对象,也许更清楚。
2021-04-07 00:29:05
这个解决方案也很好用!谢谢。可惜我也不能接受(绿色复选标记)你的回答。
2021-04-14 00:29:05

您可以将 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);
    });
}
嗨,你的函数是我需要的(只返回一个布尔值)但我不知道 ES6,你能用“简单”的 javascript 写吗?
2021-04-12 00:29:05