为了判断简单数组是否有重复,我们可以比较相同值的
第一个和
最后一个索引:
该函数为:
var hasDupsSimple = function(array) {
return array.some(function(value) {
return array.indexOf(value) !== array.lastIndexOf(value);
})
}
测试:
hasDupsSimple([1,2,3,4,2,7])
// => true
hasDupsSimple([1,2,3,4,8,7])
// => false
hasDupsSimple([1,"hello",3,"bye","hello",7])
// => true
对于一个对象数组,我们需要先将对象的值转换为一个简单的数组:
使用map
将对象数组转换为简单数组:
var hasDupsObjects = function(array) {
return array.map(function(value) {
return value.suit + value.rank
}).some(function(value, index, array) {
return array.indexOf(value) !== array.lastIndexOf(value);
})
}
测试:
var cardHand = [
{ "suit":"spades", "rank":"ten" },
{ "suit":"diamonds", "rank":"ace" },
{ "suit":"hearts", "rank":"ten" },
{ "suit":"clubs", "rank":"two" },
{ "suit":"spades", "rank":"three" },
]
hasDupsObjects(cardHand);
var cardHand2 = [
{ "suit":"spades", "rank":"ten" },
{ "suit":"diamonds", "rank":"ace" },
{ "suit":"hearts", "rank":"ten" },
{ "suit":"clubs", "rank":"two" },
{ "suit":"spades", "rank":"ten" },
]
hasDupsObjects(cardHand2);
arr = [9, 9, 9, 111, 2, 3, 3, 3, 4, 4, 5, 7];
),而这个问题则是基于对象属性进行去重。或许在语义上有些不同,但是之前最受欢迎的两个答案并没有完全解决这种情况。/giphy 让你更加了解(我知道这并不会做什么) - ruffin