2016-12-21 4 views
0

Ich habe ein Array, bei dem jede Zeile ein Array ist, das 2 Werte, S/N und Beschreibung hat.Kombinieren von 2D-Array mit Schlüsselwert-Array

array1 = [["xx9","Big Car"],["xx1","Small Car"],["xx9","Big Car"],["xx9"," Big Car"]]; 

Wie Sie sehen können, gibt es Duplikate. Also habe ich Code geschrieben, der ein count Array erstellt, das die Schlüssel-Wert-Paare enthält und jedes Element zählt. Länge der Zählung 1.

count = [xx1: 1 
     xx9: 3] 

So, jetzt möchte ich die beiden Arrays in einem neuen kombinieren, die die Menge enthält, in diesem Beispiel die endgültige Ausgabe würde wie unten gezeigt werden. Beachten Sie, dass ich auch die Duplikate in Array1 entfernen muss. Ordnung spielt keine Rolle.

final_array = [["1","xx1","Small Car"],["3",xx9","Big Car"]]; 

Hier ist meine JS-Code so weit, aber im Grunde die .forEach Schleifen werden nicht über die count Array arbeiten. Kann mir jemand helfen, damit dieser Code auf dem Schlüssel-Wert-Array funktioniert?

JS/JQuery:

//Pull the Cart Data & Orangize 
var savedList = JSON.parse(localStorage.getItem("partList")); 
     console.log(savedList); 
     determineQuantity(savedList); //Count quantity of each item 

//Count the Quantity of each item in saved list & create key-value pairs 
function determineQuantity(savedList){ 
    var newList = []; 
    var count = []; 
    for (var i=0, j = savedList.length; i<j; i++){ 
     count[savedList[i][0]] = (count[savedList[i][0]] || 0) + 1; 
    }; 
     console.log(count); 
    //Combine Quantity Array with SavedList Array 
    count.forEach(function(item,index){ 
        console.log("index = " + index + " item = " + item); 
      savedList.forEach(function(row){ 
       if ($.inArray(item,row == 0)){ //if found in this row at index 0 
        var new_part = [count[index],row[0],row[1]]; 
          console.log("new_part = " + new_part); 
        newList.push(new_part); 
       }; 
     }); 
    }); 
    console.log(newList); 
}; 

Antwort

1

wie über dieses.

var test = function(){ 
    var array = [["xx9","Big Car"],["xx1","Small Car"],["xx9","Big Car"],["xx9"," Big Car"]]; 
    var count = {xx1: 1, xx9: 3}; 
    var map = {}; 
    array.forEach(function(item){map[item[0]] = item[1]}); 
    var newArray = []; 
    for(var key in count){ 
     if(!map[key]) 
      continue; 
     newArray.push([count[key], key, map[key]]); 
    } 
    console.log(newArray); 
} 

vor allem zählen Sie ein Objekt, kein Array. dann brauchen wir nicht forEach

+0

können Sie diese Karte erklären [item [0]] = item [1] '... warum setzen wir es mit [1] gleich? – Badrush

+1

erstellen wir einfach ein Objekt namens map. das halten alle Schlüssel/Paar-Werte. etwas wie {"xx9": "BigCar", "xx1": "Kleines Auto"}. map ["xx9"] = "Big Car"; map ["xx1"] = "Kleines Auto"; Das machen wir bei forEach – subash

+0

Ahh ich sehe jetzt. item [0] ist xx9 und item [1] ist BigCar Meine nächste Frage lautet '' map [key] 'und' continue'? – Badrush