2016-05-22 4 views
0

Ich habe Array-Objekte geschachtelt, ich versuche, es zu loopen und die Werte richtig zu binden.Wie binden und loopen Sie die Array-Objektwerte in Jquery/Underscore

Mein JSON hat mehrere gleiche Werte wie 128, 16 und 64 unter memQ Schlüssel.

Wenn die Werte gleich sind, dann muss ich alle Farbe, um herauszufiltern Werte unter einem 128

Die Struktur so sein sollte:

128 followed by 
Gold 
Rose Gold 
Silver 
Gray 

Gleiche mit anderen Werten wie 16 und 64.

Dies ist, was ich versucht:

_.each(dSkuResp.models, function(oVal, oIdx) { 
    _.each(oVal.variations, function(nVal, nIdx) { 
     if (nVal.memQ == initVal) { 
      colorObj = nVal.color; 
     } else { 
      initVal = nVal.memQ; 
      sizeObj = initVal; 
     } 

    }); 
}); 

JSON:

var dSkuResp = { 
    "models": [ 
    { 
     "deviceType": "Smartphone", 
     "name": "iPhone 6S", 
     "value": "iPhone 6S", 
     "variations": [ 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Gold", 
      "name": "Apple® iPhone® 6s 128GB in Gold", 
      "displayName": "iPhone 6S 128GB Gold", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Rose Gold", 
      "name": "Apple® iPhone® 6s 128GB in Rose Gold", 
      "displayName": "iPhone 6S 128GB Rose Gold", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Silver", 
      "name": "Apple® iPhone® 6s 128GB in Silver", 
      "displayName": "iPhone 6S 128GB Silver", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Gray", 
      "name": "Apple® iPhone® 6s 128GB in Space Gray", 
      "displayName": "iPhone 6S 128GB Space Gray", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Gold", 
      "name": "Apple® iPhone® 6s 16GB in Gold", 
      "displayName": "iPhone 6S 16GB Gold", 
      "memU": "GB", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Rose Gold", 
      "name": "Apple® iPhone® 6s 16GB in Rose Gold", 
      "displayName": "iPhone 6S 16GB Rose Gold", 
      "memU": "GB", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Silver", 
      "name": "Apple® iPhone® 6s 16GB in Silver", 
      "displayName": "iPhone 6S 16GB Silver", 
      "memU": "GB", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Gray", 
      "name": "Apple® iPhone® 6s 16GB in Space Gray", 
      "displayName": "iPhone 6S 16GB Space Gray", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Gold", 
      "name": "Apple® iPhone® 6s 64GB in Gold", 
      "displayName": "iPhone 6S 64GB Gold", 
      "memU": "GB", 
      "maxValue": "320.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Rose Gold", 
      "name": "Apple® iPhone® 6s 64GB in Rose Gold", 
      "displayName": "iPhone 6S 64GB Rose Gold", 
      "memU": "GB", 
      "maxValue": "320.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Silver", 
      "name": "Apple® iPhone® 6s 64GB in Silver", 
      "displayName": "iPhone 6S 64GB Silver", 
      "memU": "GB", 
      "maxValue": "320.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Gray", 
      "name": "Apple® iPhone® 6s 64GB in Space Gray", 
      "displayName": "iPhone 6S 64GB Space Gray", 
      "memU": "GB", 
      "maxValue": "320.0" 
     } 
     ] 
    }, 
    { 
     "deviceType": "Smartphone", 
     "name": "iPhone 6S", 
     "value": "iPhone 6S", 
     "variations": [ 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Blue", 
      "name": "Apple® iPhone® 6s 128GB in Gold", 
      "displayName": "iPhone 6S 128GB Gold", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Green", 
      "name": "Apple® iPhone® 6s 128GB in Rose Gold", 
      "displayName": "iPhone 6S 128GB Rose Gold", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Yellow", 
      "name": "Apple® iPhone® 6s 128GB in Silver", 
      "displayName": "iPhone 6S 128GB Silver", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "128", 
      "os": "iOS", 
      "color": "Black", 
      "name": "Apple® iPhone® 6s 128GB in Space Gray", 
      "displayName": "iPhone 6S 128GB Space Gray", 
      "memU": "GB", 
      "maxValue": "335.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Purple", 
      "name": "Apple® iPhone® 6s 16GB in Gold", 
      "displayName": "iPhone 6S 16GB Gold", 
      "memU": "GB", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Maroon", 
      "name": "Apple® iPhone® 6s 16GB in Rose Gold", 
      "displayName": "iPhone 6S 16GB Rose Gold", 
      "memU": "GB", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Pink", 
      "name": "Apple® iPhone® 6s 16GB in Silver", 
      "displayName": "iPhone 6S 16GB Silver", 
      "memU": "GB", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "16", 
      "os": "iOS", 
      "color": "Violet", 
      "name": "Apple® iPhone® 6s 16GB in Space Gray", 
      "displayName": "iPhone 6S 16GB Space Gray", 
      "maxValue": "300.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Red", 
      "name": "Apple® iPhone® 6s 64GB in Gold", 
      "displayName": "iPhone 6S 64GB Gold", 
      "memU": "GB", 
      "maxValue": "320.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Orange", 
      "name": "Apple® iPhone® 6s 64GB in Rose Gold", 
      "displayName": "iPhone 6S 64GB Rose Gold", 
      "memU": "GB", 
      "maxValue": "320.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "Carbon", 
      "name": "Apple® iPhone® 6s 64GB in Silver", 
      "displayName": "iPhone 6S 64GB Silver", 
      "memU": "GB", 
      "maxValue": "320.0" 
     }, 
     { 
      "memQ": "64", 
      "os": "iOS", 
      "color": "C Gray", 
      "name": "Apple® iPhone® 6s 64GB in Space Gray", 
      "displayName": "iPhone 6S 64GB Space Gray", 
      "memU": "GB", 
      "maxValue": "320.0" 
     } 
     ] 
    } 
    ] 
}; 

Antwort

2

Dies wird eine Farbe mit den MEMQ Werte als Schlüssel-Objekt machen. Jede memQ-Taste hat ein Array mit den entsprechenden Farben.

var colors = {}; 

_.each(dSkuResp.models, function(oVal, oIdx) { 
    _.each(oVal.variations, function(nVal, nIdx) { 
     if (!colors[nVal.memQ]) { 
      colors[nVal.memQ] = []; 
     } 

     if (_.indexOf(colors[nVal.memQ], nVal.color) === -1) { 
      colors[nVal.memQ].push(nVal.color); 
     } 
    }); 
}); 

console.log('colors: ' + JSON.stringify(colors)); 
// prints: colors: {"16":["Gold","Rose Gold","Silver","Gray"],"64":["Gold","Rose Gold","Silver","Gray"],"128":["Gold","Rose Gold","Silver","Gray"]} 

aktualisiert Antwort für mehrere Modelle:

var colors = []; 

_.each(dSkuResp.models, function(oVal, oIdx) { 
    colors.push({}); 
    _.each(oVal.variations, function(nVal, nIdx) { 
     if (!colors[colors.length - 1][nVal.memQ]) { 
      colors[colors.length - 1][nVal.memQ] = []; 
     } 

     if (_.indexOf(colors[colors.length - 1][nVal.memQ], nVal.color) === -1) { 
      colors[colors.length - 1][nVal.memQ].push(nVal.color); 
     } 
    }); 
}); 

console.log(JSON.stringify(colors)); 

// [{"16":["Gold","Rose Gold","Silver","Gray"],"64":["Gold","Rose Gold","Silver","Gray"],"128":["Gold","Rose Gold","Silver","Gray"]},{"16":["Purple","Maroon","Pink","Violet"],"64":["Red","Orange","Carbon","C Gray"],"128":["Blue","Green","Yellow","Black"]}] 

console.log(JSON.stringify(colors[0])); 
// {"16":["Gold","Rose Gold","Silver","Gray"],"64":["Gold","Rose Gold","Silver","Gray"],"128":["Gold","Rose Gold","Silver","Gray"]} 

console.log(JSON.stringify(colors[1])); 
// {"16":["Purple","Maroon","Pink","Violet"],"64":["Red","Orange","Carbon","C Gray"],"128":["Blue","Green","Yellow","Black"]} 
+0

Ja es funktioniert, wenn ich einen einzigen Satz von Objekt, Wenn ich es die Ausgabe wie aus mehreren dann sollte für die Index-0 128 gefolgt von entsprechende Farbe. und für den Index 1 128 gefolgt von der entsprechenden Farbe. Ich habe den JSON aktualisiert. Momentan bildet es die ganze Farbe verschiedener Objekte unter einer 128. –

+0

Kannst du mir bitte mit der aktualisierten Antwort helfen. Ich denke, du hast vielleicht verstanden, was ich erwarte. –

+0

Vielen Dank, das ist was ich suche –

Verwandte Themen