2017-07-28 249 views
0

我收到兩個整數和字符串的2維數組的過濾整數和字符串的重複子陣列,並且我想從他們刪除重複:如何從二維陣列在Javascript

原始數組= [["admin", 2, "regular"], ["customer", "regular"], ["regular", "customer"], [1], ,["admin"], [1], ["admin"]

預期的結果= [["admin", 2, "regular"], ["customer", "regular"], [1], ["admin"]]

請我怎麼能做到這一點的Javascript?

回答

1

不要緊,如果你的陣列(和它的子陣列)被重新排序?如果沒有,那麼:

var array = [["admin", 2, "regular"], ["customer", "regular"], ["regular", "customer"], [1],["admin"], [1], ["admin"]]; 
 

 
array = array.map(x => x.sort()).sort(); 
 

 
var uniqueArray = []; 
 
uniqueArray.push(array[0]); 
 

 
for (var i = 1; i < array.length; i++){ 
 
    if (JSON.stringify(array[i]) != JSON.stringify(array[i-1])){ 
 
     uniqueArray.push(array[i]); 
 
     } 
 
} 
 

 
console.log(uniqueArray);

+0

感謝@PedroCorso。效果很好。 –

0

這是一個算法,可以幫助你。它不是JavaScript寫的。 而且它不會做[「客戶」,「常規」]和[「常規」,「客戶」],但你的總體思路之間的區別:

var newArray = []; 
for(x in originalArray) { //travel in the original array 
var flag = 1; //flag indicating if x is already in newArray 
    for(y in array) { 
    if(y == x) flag = 0; //if x already belongs to newArray 
    } 
    if(flag==1) newArray += x; //add if not already in newArray 
flag = 1; //reset value of flag 
} 

基本上,你創建一個新的數組在其中只添加了不屬於它的值。祝你好運:)

1

你可以從內部數組中排序一個副本,並構建一個字符串,並在篩選時檢查一個哈希表。

var array = [["admin", 2, "regular"], ["customer", "regular"], ["regular", "customer"], [1], ["admin"], [1], , ["admin"]], 
 
    object = Object.create(null), 
 
    unique = array.filter(function (a) { 
 
     var b = a.slice().sort().join('|'); 
 
     return !object[b] && (object[b] = true) 
 
    }); 
 
    
 
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }