我试图在数组中获取重复索引。但是由于某种原因无法使我的代码正常工作。
我尝试了以下
var arr = [
["OPEL", "12365", "TY"],
["FORD", "52874", "QW"],
["OPEL", "96542", "TY"],
["FIAT", "45621", "TY"],
["FIAT", "74125", "QW"],
["FORD", "52874", "QW"]
];
function FindDuplicates(){
var a = arr.sort();
for (var i = 0; i < a.length-1; i++){
if (a[i+1] == a[i]){
alert(i);
}
}
}
谁能告诉我这里做错了什么?
答案 0 :(得分:0)
索引多维数组时,需要多个索引。在您的情况下arr[index of sub-array][index of element in sub-array]
。
答案 1 :(得分:0)
要指出的一些事项:
a
不应该用作变量名;虽然它可能有用,但编程约定是使用该变量名进行排序(在某些语言中,在开放代码中使用它可能会导致问题)
a
和arr
指向内存中的同一个数组;由于您没有将arr
的所有元素(和子元素)复制到a
,因此它们都会引用相同的值,因此a
无用且排序将应用于{ {1}}
正如@Saar指出的那样,因为所有元素都决定了数组的唯一性,你可以将数组转换为字符串并将该值与下一个数组的字符串进行比较
请参阅:
arr
答案 2 :(得分:0)
您可以创建一个Hash对象,用于存储已访问过的元素。如果新的元素具有与先前使用的相同的密钥,则它是重复的。
var arr = [
["OPEL", "12365", "TY"],
["FORD", "52874", "QW"],
["OPEL", "96542", "TY"],
["FIAT", "45621", "TY"],
["FIAT", "74125", "QW"],
["FORD", "52874", "QW"]
];
var findDups = function(a) {
var hash = {};
for (var i = 0; i < a.length; i++) {
var key = a[i].toString();
if ( hash[key] ) {
alert("Found duplicate at index " + i + " for " + key);
}
else {
hash[key] = true;
}
}
}(arr);
&#13;
答案 3 :(得分:-1)
你在另一个数组中基本上有一个数组,在尝试比较数组时==
对你不起作用。
在你的情况下,因为数组是你可以做的所有字符串:
a[i+1].toString() === a[i].toString()
如果你想要一个更强大的代码检查这个线程中关于如何检查数组相等性的答案,这将特别适用于你的情况: How to check if two arrays are equal with JavaScript?