2016-04-21 14 views
-1
statment

abflachen zwei Array mit einem if-Anweisung Ich habe array1 und array2 ich array3 willJavaScript-Array mit einem abflachen, wenn

<script> 
    var array1 = [[5,10],[6,10],[7,10],[8,10],[9,10]]; 
    var array2 = [[1,10],[2,10],[3,10],[4,10],[5,40],[6,40]]; 

    // only the second number will add if they are different 
    // [5,10] + [5,40] 
    // [6,10] + [6,40] 

    // array3 = [[1,10],[2,10],[3,10],[4,10],[5,50],[6,50],[7,10],[8,10],[9,10]]; 

</script> 
+1

Schritt 1: eine bessere Struktur verwenden (zum Beispiel eine Karte). Schritt 2: Es ist jetzt trivial –

+0

Mögliches Duplikat von [JavaScript-Array-Unterschied] (http://StackOverflow.com/Questions/1187518/Javascript-Array-Difference) –

+1

Wo ist der Aufwand? Hast du selbst versucht, das selbst zu lösen? – Brett

Antwort

0

Dies ist ein Vorschlag mit Array#forEach() in einer einzigen Schleife und ein temporäres Objekt.

var array1 = [[5, 10], [6, 10], [7, 10], [8, 10], [9, 10]], 
 
    array2 = [[1, 10], [2, 10], [3, 10], [4, 10], [5, 40], [6, 40]], 
 
    array3 = []; 
 

 
array2.concat(array1).forEach(function (a) { 
 
    if (!this[a[0]]) { 
 
     this[a[0]] = [a[0], a[1]]; 
 
     array3.push(this[a[0]]); 
 
     return; 
 
    } 
 
    if (this[a[0]][1] !== a[1]) { 
 
     this[a[0]][1] += a[1]; 
 
    } 
 
}, Object.create(null)); 
 

 

 
document.write('<pre>' + JSON.stringify(array3, 0, 4) + '</pre>');

Lösung mit for loop

var array1 = [[5, 10], [6, 10], [7, 10], [8, 10], [9, 10]], 
 
    array2 = [[1, 10], [2, 10], [3, 10], [4, 10], [5, 40], [6, 40]], 
 
    array3 = [], 
 
    i, 
 
    temp = Object.create(null), 
 
    array = array2.concat(array1); 
 

 
for (i = 0; i < array.length; i++) { 
 
    if (!temp[array[i][0]]) { 
 
     temp[array[i][0]] = [array[i][0], array[i][1]]; 
 
     array3.push(temp[array[i][0]]); 
 
     continue; 
 
    } 
 
    if (temp[array[i][0]][1] !== array[i][1]) { 
 
     temp[array[i][0]][1] += array[i][1]; 
 
    } 
 
} 
 

 
document.write('<pre>' + JSON.stringify(array3, 0, 4) + '</pre>');

+0

Wie kann ich damit umgehen mit für in Vanille js –

+0

@MohammadGheydari, siehe bearbeiten. –

Verwandte Themen