【问题标题】:Return all duplicate values in an array in jQuery/javascript在jQuery / javascript中返回数组中的所有重复值
【发布时间】:2014-03-08 17:33:32
【问题描述】:

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

例如

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]
};

【问题讨论】:

  • 你有没有尝试过?
  • 是的,我已经试过了,不过好像需要,深度算法O.O,请帮忙!
  • 您可以发布您尝试过的内容吗?
  • 在这里发布代码先生是无关紧要的,因为这些值并不完全或接近它。只是想知道是否有一种简单的方法可以得到我想要的东西。感谢您的回复:)

标签: javascript algorithm native-code


【解决方案1】:

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

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

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

【讨论】:

  • 哦!对不起,先生,我是新来的,有没有办法在这里更改类别或标题?
  • 您可以编辑您的原始帖子,然后向下滚动到底部以添加另一个标签,以吸引更多人为您提供答案,但是您的问题并不大,所以我认为这些评论显示在你的主要帖子有一些很好的链接到那里的其他问题。或者您可以尝试自己实施我的建议。
【解决方案2】:

我相信这可以满足您的要求,尽管输出与您的示例期望不同,所以也许不是,但我无法与您尝试的内容进行比较,您能澄清一下吗?

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

【讨论】:

  • 谢谢先生!是同一个先生!我只是忘记了最后的数字 10 和 4。谢谢!猜猜在算法方面真的有天才!
  • 如果能以某种方式解释代码是如何工作的,我也可以学习并改进!我可以做你的徒弟吗? :D
  • hmmmm,如果 setOfvalues 中的每个值都来自 Obj,该怎么办?或者让我改写一下。如果getUniqueAndduplicatesWithIndicies() 上传递的参数是一个对象怎么办?
  • 如果可以比较数组中的值是否相等,那么它可以工作(NaN 不能像这样比较,因为 NaN !== NaN)。代码很简单,有什么不懂的?在保留累加器的同时遍历所有值。如果当前值与一个已经重复的值匹配,或者如果当前值在被测试的数组中有另一个具有不同索引的值,则它是重复的,因此将值和索引存储在重复中。否则它是唯一的,所以将值和索引存储在唯一的中。
猜你喜欢
  • 2018-08-21
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 2022-01-09
  • 1970-01-01
  • 2014-08-12
  • 2018-08-01
相关资源
最近更新 更多