我需要确定一个唯一的数字数组。我在互联网上找到了下面的代码片段,并且在数组中包含零之前,它都可以正常工作。我在Stack
Overflow的这里找到了另一个脚本,看起来几乎完全一样,但是它不会失败。
因此,为了帮助我学习,有人可以帮助我确定原型脚本出了什么问题吗?
Array.prototype.getUnique = function() {
var o = {}, a = [], i, e;
for (i = 0; e = this[i]; i++) {o[e] = 1};
for (e in o) {a.push (e)};
return a;
}
使用 JavaScript 1.6 / ECMAScript 5,
您可以通过filter
以下方式使用Array
的本机方法来获取具有唯一值的数组:
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
// usage example:
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter( onlyUnique ); // returns ['a', 1, 2, '1']
本机方法filter
将遍历数组,仅保留那些通过给定回调函数的条目onlyUnique
。
onlyUnique
检查给定值是否是第一个出现。否则,它必须是重复的,并且不会被复制。
此解决方案无需任何额外的库(如jQuery或prototype.js)即可工作。
它也适用于混合值类型的数组。
对于旧版浏览器(<ie9),它们不支持本机方法filter
,indexOf
您可以在MDN文档中找到关于filter和indexOf的解决方法。
如果要保留最后一次出现的值,请简单地替换indexOf
为lastIndexOf
。
使用ES6可以简化为:
// usage example:
var myArray = ['a', 1, 'a', 2, '1'];
var unique = myArray.filter((v, i, a) => a.indexOf(v) === i);
// unique is ['a', 1, 2, '1']
ES6有一个本地对象Set
来存储唯一值。要获得具有唯一值的数组,您现在可以执行以下操作:
var myArray = ['a', 1, 'a', 2, '1'];
let unique = [...new Set(myArray)];
// unique is ['a', 1, 2, '1']
构造函数Set
采用可迭代对象(例如Array),并且散布运算符...
将集合转换回Array。
问题内容: 我需要检查一个JavaScript数组,看看是否有重复的值。最简单的方法是什么?我只需要查找重复的值是什么-我实际上不需要它们的索引或它们被重复多少次。 我知道我可以遍历数组并检查所有其他值是否匹配,但是似乎应该有一种更简单的方法。 问题答案: 您可以对数组进行排序,然后遍历整个数组,然后查看下一个(或上一个)索引是否与当前索引相同。假设您的排序算法很好,则该值应小于O(n 2): 以
我有以下数组 我想从这个数组中得到唯一的值。所以我希望我的结果是这样的 我使用了数组唯一函数,但无法得到结果 如果我有两个索引,这是有效的,但是对于多个索引呢?
如何根据属性值从数组中删除所有对象? 在上面的代码中,它只删除一个对象。如何删除所有if匹配项?
我肯定这是以前问过的,如果重复,对不起。假设我有以下数据框: 在“key”上执行groupby,我知道我们可以执行以下操作: 获取数组中所有'拆分'数据的最简单方法是什么?: 我不一定只按一个键进行分组,而是使用其他几个索引(例如“年”和“月”),这就是为什么我想使用groupby函数,但保留数组中所有分组的值。
问题内容: 我有三列的表:,和 有重复的字段。我想删除所有具有相同的行为别人 ,除了 对最近更新的一个。 因此,如果表包含这些行: 然后,我只想保留这些行: 您如何在SQL中做到这一点?我想象会从具有重复值的行中删除单个random(?)行,但是如何使其除最近更新的行之外的 所有 行删除呢? 问题答案: 您可以使用左联接来执行此操作: 这意味着对于每一行,它会寻找更新日期最近的另一行,如果有更新日
问题内容: 我有一个非常简单的JavaScript数组,其中可能包含重复项,也可能不包含重复项。 我需要删除重复项并将唯一值放入新数组中。 我可以指出我尝试过的所有代码,但是我认为这没用,因为它们不起作用。我也接受jQuery解决方案。 问题答案: 快速的使用jQuery: