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

时间:2018-03-11 00:15:33

标签: javascript arrays compare

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

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

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

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

14 个答案:

答案 0 :(得分:12)

findDuplicates函数将数组中所有项的索引与同一项的第一次出现的索引进行比较,如果索引不相同则返回为重复项。

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

let findDuplicates = (arr) => arr.filter((item, index) => arr.indexOf(item) != index)

console.log(findDuplicates(strArray))

答案 1 :(得分:2)

if (serviceHub.networkMapCache.isValidatingNotary(notaryParty)) {
    subFlow(SendTransactionWithRetry(session, stx))
    session.receive<List<TransactionSignature>>()
}

我在原版中添加了另一个副本,只是为了表明它会找到一个非连续的副本。

答案 2 :(得分:2)

使用ES6功能

function checkIfDuplicateExists(w){
    return new Set(w).size !== w.length 
}
console.log(
    checkIfDuplicateExists(["a", "b", "c", "a"])
// true 
);
console.log(
    checkIfDuplicateExists(["a", "b", "c"]))
//false
}

答案 3 :(得分:1)

在数组上使用 some 函数: 如果数组中的任何项从头开始的索引号都不等于从头到尾的索引号,则该项在数组中存在多次。

function hasDuplicates(arr){
    return arr.some( (item) => {
        return arr.indexOf(item) !== arr.lastIndexOf(item);
    });
}

答案 4 :(得分:1)

这是我猜最简单的解决方案:

function diffArray(arr1, arr2) {
  return arr1
    .concat(arr2)
    .filter(item => !arr1.includes(item) || !arr2.includes(item));
}

答案 5 :(得分:0)

以下代码使用 unique-filter (检查项的每次出现是否是第一次出现)将数组中唯一项的数量与项目总数进行比较:如果两者相等,则数组只包含唯一元素,否则会有一些重复。

var firstUnique = (value, index, array) => array.indexOf(value) === index;
var numUnique = strArray.filter(firstUnique).length;
var allUnique = strArray.length === numUnique; 

答案 6 :(得分:0)

简单的Javascript(如果您不了解ES6)

function hasDuplicates(arr) {
    var counts = [];

    for (var i = 0; i <= arr.length; i++) {
        if (counts[arr[i]] === undefined) {
            counts[arr[i]] = 1;
        } else {
            return true;
        }
    }
    return false;
}

// [...]

var arr = [1, 1, 2, 3, 4];

if (hasDuplicates(arr)) {
  alert('Error: you have duplicates values !')
}

答案 7 :(得分:0)

在处理大型数组时,请使用对象键以获得良好的性能(在这种情况下,为每个元素循环并再次循环以检查重复项将非常慢)。

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

var counting = {};
strArray.forEach(function (str) {
    counting[str] = (counting[str] || 0) + 1;
});

if (Object.keys(counting).length !== strArray.length) {
    console.log("Has duplicates");

    var str;
    for (str in counting) {
        if (counting.hasOwnProperty(str)) {
            if (counting[str] > 1) {
                console.log(str + " appears " + counting[str] + " times");
            }
        }
    }
}

答案 8 :(得分:0)

   var elems = ['f', 'a','b','f', 'c','d','e','f','c'];

    elems.sort();

    elems.forEach(function (value, index, arr){

        let first_index = arr.indexOf(value);
        let last_index = arr.lastIndexOf(value);

         if(first_index !== last_index){

         console.log('Duplicate item in array ' + value);

         }else{

         console.log('unique items in array ' + value);

         }

    });

答案 9 :(得分:0)

您可以使用Set并过滤经常看到的值。

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);

答案 10 :(得分:0)

您可以使用reduce:

const arr = ["q", "w", "w", "e", "i", "u", "r"]
arr.reduce((acc, cur) => { 
  if(acc[cur]) {
    acc.duplicates.push(cur)
  } else {
    acc[cur] = true //anything could go here
  }
}, { duplicates: [] })

结果如下:

{ ...Non Duplicate Values, duplicates: ["w"] }

这样,您就可以对重复的值做任何想做的事情!

答案 11 :(得分:0)

您可以使用设置来执行此操作。您必须创建一个Set并将所有值放入该Set中的Array中。然后,检查它们的长度是否相同。如果不是,您将知道存在重复值,因为Set只能具有唯一值。在下面的链接中对此进行了解释:

https://medium.com/dailyjs/how-to-remove-array-duplicates-in-es6-5daa8789641c

答案 12 :(得分:0)

如果您以功能性方式使用打字稿,这是我的解决方案:

const hasDuplicates = <T>(arr: T[]): boolean => {
  if (arr.length === 0) return false
  if (arr.lastIndexOf(arr[0]) !== 0) return true
  return hasDuplicates(arr.slice(1))
}

答案 13 :(得分:0)

我认为没有比这更简单的了。

const findDuplicates = arr => [...new Set(arr.filter(v => arr.indexOf(v) !== arr.lastIndexOf(v)))];

console.log(findDuplicates([ "q", "w", "w", "e", "i", "u", "r"]));