簡體   English   中英

多維數組中的重復索引

[英]Indices of Duplicates in Multidimensional Array

我正在嘗試獲取數組中重復項的索引。但是由於某種原因無法使我的代碼正常工作。

我嘗試了以下

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

有人可以告訴我我在做什么錯嗎?

當索引多維數組時,您需要多個索引。 在您的情況下, arr[index of sub-array][index of element in sub-array]

需要指出的幾點:

  • a不應用作變量名; 盡管可能有效,但編程約定是使用該變量名進行排序(在某些語言中,在開放代碼中使用它可能會導致問題)

  • aarr指向內存中的同一數組; 由於您沒有將arr所有元素(和子元素)復制到a ,它們都將引用相同的值,因此a是無用的,並且排序將應用於arr

  • 正如@Saar指出的那樣,由於所有元素都決定了數組的唯一性,因此您可以將數組轉換為字符串並將該值與下一個數組的字符串進行比較

看到:

console.clear();
var arr = [
        ["OPEL", "12365", "TY"],
        ["FORD", "52874", "QW"],
        ["OPEL", "96542", "TY"],
        ["FIAT", "45621", "TY"], 
        ["FIAT", "74125", "QW"],
        ["FORD", "52874", "QW"]
];

function sortAlphabetically(a,b){
  var a_lower = a.toString().toLowerCase(),
      b_lower = b.toString().toLowerCase();

  // sort ascending (a comes first)
  if (a_lower < b_lower)
    return -1;

  // b comes first (move a behind b)
  if (a_lower > b_lower)
    return 1;

  // default: a and b are the same (no sort)
  return 0;
}


function FindDuplicates(){
  arr.sort(sortAlphabetically);

  for (var i = 0; i < arr.length-1; i++){
    if (arr[i+1]+'' == arr[i]+''){
      console.log('Duplicate at: ', 
                  [
                    '[', i, ']',
                    ' and ',
                    '[', i+1, ']',
                    '\n\tvalue: "',arr[i],'"'
                  ].join(''));
    }
  }
}

FindDuplicates();

您可以創建一個將存儲已訪問元素的哈希對象。 如果新來的元素具有與先前使用的相同的密鑰,則它是重復的。

 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); 

您基本上在另一個數組內部有一個數組,當嘗試比較數組時, ==對您不起作用。

就您而言,由於數組是所有字符串,因此您可以執行以下操作:

a[i+1].toString() === a[i].toString()

如果您想要更強大的代碼,請在此線程中檢查如何檢查數組相等性的答案,這將特別適合您的情況: 如何使用JavaScript檢查兩個數組是否相等?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM