2016-05-22 3 views
0

入れ子になった配列オブジェクトがあり、ループして値を正しくバインドしようとしています。複数の配列をバインドしてループする方法Jquery/Underscoreのオブジェクト値

My JSONには、memQキーの下に128,16,64などの複数の同じ値があります。

値が同じであるならば、私は1つ128

下値構造は、このようにする必要があり、すべてのカラーフィルタアウトする必要があります:16と64のような他の値と同じ

128 followed by 
Gold 
Rose Gold 
Silver 
Gray 

を。

これは私が試したものです:

_.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" 
     } 
     ] 
    } 
    ] 
}; 

答えて

2

これは色がキーとしてmemQ値を持つオブジェクトになります。各memQキーには対応する色の配列があります。

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"]} 

複数のモデルのための更新の答え:

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

はい、それは私がオブジェクトの単一のセットを持っている場合、私は複数持っている場合、それは出力が続くインデックス0 128用などからする必要があり、動作します対応する色。インデックス1 128の後に対応する色が続く。私はJSONを更新しました。現在、1つの下に異なるオブジェクトのすべての色を形成しています。 –

+0

更新された回答で私を助けてください。私はあなたが私が期待していることを理解しているかもしれないと思います。 –

+0

非常にありがとう、これは私が探しているものです –

関連する問題