在jQuery / javascript中返回数组中的所有重复值

时间:2014-03-08 17:33:33

标签: javascript algorithm native-code

是否有一种技术或简单的方法可以返回所有重复值,如果可能的话还有返回它们的索引。还有独特的,及其指数。我怎样才能做到这一点? (可能使用也可能不使用对象)

实施例

var setOfValues = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 10, 10, 9, 10, 8 , 4, 11];

unique = {
    values: [1, 5, 9, 8, 4, 11],
    indices: [0, 9, 12, 14, 15, 16]
};

duplicates = {
    values: [2, 2, 2, 3, 3, 4, 4, 4, 10, 10, 10],
    indices: [1, 2, 3, 4, 5, 6, 7, 8, 10, 11]
};

2 个答案:

答案 0 :(得分:0)

我宁愿把它作为算法问题而不是javascript问题

您可以先尝试对数组进行排序,然后很容易想出一个O(n)算法来查找每个数据的所有重复项和副本数。

然后,您可以使用找到的重复项搜索原始数组,以确定重复项的原始索引。

答案 1 :(得分:0)

我相信这就是你所要求的,虽然输出与你的例子预期不同,所以也许不是,但我无法与你的尝试进行比较,你能澄清一下吗?

的Javascript

function getUniqueAndduplicatesWithIndicies(array) {
    return array.reduce(function (acc, curr, index, arr) {
        if (acc.duplicates.values.indexOf(curr) !== -1 || arr.lastIndexOf(curr) !== index) {
            acc.duplicates.values.push(curr);
            acc.duplicates.indicies.push(index);
        } else {
            acc.unique.values.push(curr);
            acc.unique.indicies.push(index);
        }

        return acc;
    }, {
        unique: {
            values: [],
            indicies: []
        },
        duplicates: {
            values: [],
            indicies: []
        }
    });
}

var setOfValues = [1, 2, 2, 2, 3, 3, 4, 4, 4, 5, 10, 10, 9, 10, 8, 4, 11];

console.log(JSON.stringify(getUniqueAndduplicatesWithIndicies(setOfValues)));

输出

{
    "unique":{
        "values":[1,5,9,8,11],
        "indicies":[0,9,12,14,16]
    },
    "duplicates":{
        "values":[2,2,2,3,3,4,4,4,10,10,10,4],
        "indicies":[1,2,3,4,5,6,7,8,10,11,13,15]
    }
} 

jsFiddle