找到公共元素在使用Javascript 1个阵列(Find common elements in 1

2019-10-23 11:14发布

我有这个:

var mergeUniqueItems = ["-JsDEcxz_ZSGFLKwd1QM", 
"-JsJ2NXGDYKI6QRsuXVK", 
"-JsJ2RK-kOG2eGcG04xF", 
"-JsJ2RK-kOG2eGcG04xF", 
"-JsJ2YLPiP6751zh8geS"]

我已经使用这个:

    var duplicateArray = [];
    for (var i = 0; i < mergeUniqueItems.length; i ++){
        for (var j = 1; j < mergeUniqueItems.length; j ++){
            if (mergeUniqueItems[i] == mergeUniqueItems[j]){
                duplicateArray.push(mergeUniqueItems[i]);
            }
        }
    }

    console.log(duplicateArray);

结果又变成是这样的:

["-JsJ2NXGDYKI6QRsuXVK", 
"-JsJ2RK-kOG2eGcG04xF", 
"-JsJ2RK-kOG2eGcG04xF", 
"-JsJ2RK-kOG2eGcG04xF", 
"-JsJ2RK-kOG2eGcG04xF", 
"-JsJ2YLPiP6751zh8geS"]

当我的期望是在1个阵列像下面重复的项目:

 ["-JsJ2RK-kOG2eGcG04xF"]

如果有一个以上的重复值,数组应该是这样的:

["-JsJ2RK-kOG2eGcG04xF", "another_duplicate_1", "another_duplicate_2", ...]

我真的不知道什么是错我的代码,请好心帮。

谢谢

Answer 1:

启动j在离i+1 ,而不是1 ,和检查,以确保你没有已经添加了重复的值。

for (var i = 0; i < mergeUniqueItems.length; i ++){
    for (var j = i + 1; j < mergeUniqueItems.length; j ++){
        if (mergeUniqueItems[i] == mergeUniqueItems[j]){
            if (duplicateArray.indexOf(mergeUniqueItems[i]) < 0)
                duplicateArray.push(mergeUniqueItems[i]);
            break;
        }


Answer 2:

这里有一个候补尖尖的正确答案。

var duplicateArray = mergeUniqueItems.filter(function(item, i, orig) {
    return orig.indexOf(item, i+1) === -1;
});

console.log(duplicateArray);

这比使用显式循环清洁好位。

需要注意的是它会保留最后,而不是第一个重复的。 如果这是一个问题,使用.indexOf(item, i-1)代替。


我可能已经被你需要什么样的困惑。 如果你只需要每个重复的一个实例,那么这将是这样的:

var duplicateArray = mergeUniqueItems.filter(function(item, i, orig) {
    var nxt = orig.indexOf(item, i+1);
    return nxt !== -1 && orig.lastIndexOf(item) == nxt;
});

或这个:

var duplicateArray = mergeUniqueItems.filter(function(item, i, orig) {
    var nxt = orig.indexOf(item, i+1);
    return nxt !== -1 && orig.indexOf(item, nxt+1) === -1;
});

另一种方法是使用单独的.filter()在所述第一结果:

var duplicateArray = mergeUniqueItems.filter(function(item, i, orig) {
    return orig.indexOf(item, i+1) !== -1;
}).filter(function(item, i, orig) {
    return orig.indexOf(item, i+1) === -1;
});


文章来源: Find common elements in 1 array using Javascript