2017-05-19 3 views
1

Ich erstelle ein multidimensionales Array zum Zeichnen von Sankey-Diagramm. Es unterstützt jedoch keine Zykluswerte. Also ich möchte ein Array entfernen, wenn es in umgekehrter Reihenfolge kommt. Für zB: Wenn ich ein Array mit dem Namen haben,Entfernen Sie umgekehrte Werte aus einem multidimensionalen Array mit Javascript

var myArray = [['aaa','20'],['bbb','30'],['ccc','40'],['30','bbb']] 

Ich möchte ein Ergebnis erhalten, wie folgt:

var myArray = [['aaa','20'],['bbb','30'],['ccc','40']] 

Antwort

1

Sie, indem Sie die Vorgänger des Arrays filtern könnte.

var array = [['aaa','20'],['bbb','30'],['ccc','40'],['30','bbb']], 
 
    result = array.filter(function (a, i, aa) { 
 
     return aa.slice(0, i).every(function (b) { 
 
      return a[0] !== b[1] || a[1] !== b[0]; 
 
     }); 
 
    }); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Für eine beliebige Anzahl der Elemente, können Sie eine Kopie der inneren Anordnung erhalten, sortieren sie und eine verbundene Kette von ihm bekommen und es mit einer Hash-Tabelle vergleichen.

var array = [["M", "A", 1], ["B", "G", 1], ["A", "M", 1], ["B", "C", 1]], 
 
    result = array.filter(function (hash) { 
 
     return function (a) { 
 
      var t = a.slice().sort().join('|'); 
 
      return !hash[t] && (hash[t] = true); 
 
     }; 
 
    }(Object.create(null))); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Wie kann ich den Code ändern, wenn drei Werte in meinem Array wie sind; ["M", "A", 1], ["B", "G", 1], ["A", "M", 1], ["B", "C", 1] –

+0

könnten Artikel in beliebiger Reihenfolge? –

0

Angenommen, Sie haben den ersten Wert erwartet einen String und die zweite zu sein, eine ganze Zahl zu sein, man könnte leicht herausfiltern „rückwärts“ Arrays von nur sicher den ersten Wert machen Überprüfung ist keine Ganzzahl:

function removeBackwardsArrays(values) { 
    return !parseInt(values[0]); 
} 

var values = [['aaa','20'],['bbb','30'],['ccc','40'],['30','bbb']]; 

console.log(values.filter(removeBackwardsArrays)); 

Fühlen Sie sich frei, den Filter zu manipulieren, basierend auf was auch immer Konditional Sie passen scheinen.

Verwandte Themen