2017-04-03 20 views
0

をループ:私ができるUnderscore.js - 私は、次のオブジェクト配列持つオブジェクト配列

_.each(products.subTypes, function(subType) { 
     console.log(subType.name); 
}); 

:なぜ以下のドット表記コンソールには何も記録しませんunderscore.jsを使用して

var products = [ 
    { 
     id: 1, 
     name: "Product 1", 
     subTypes: [ 
      { 
       id: 1, 
       name: "Product 1 - Sub Type 1" 
      }, 
      { 
       id: 2, 
       name: "Product 1 - Sub Type 2" 
      } 
     ] 
    }, 
    { 
     id: 2, 
     name: "Product 2", 
     subTypes: [ 
      { 
       id: 1, 
       name: "Product 2 - Sub Type 1" 
      }, 
      { 
       id: 2, 
       name: "Product 2 - Sub Type 2" 
      } 
     ] 
    } 
]; 

を次のようにforeachループを入れ子にするだけで動作させることができますか?

_.each(products, function (product) { 
    _.each(product.subTypes, function (subType) { 
     console.log(subType.name); 
    }); 
}); 
+2

[0] .subTypesと、[1] .subTypesと、上記のコードのように –

+0

あなたの最後のピースの製品はまさに正しい一切products.subTypesありません仮定。あなたは、オブジェクトの配列内のプロパティとしてオブジェクトの配列を持っています - あなたは2回ループする必要があります。単一のオブジェクトのプロパティにアクセスしようとすると 'products.subTypes'でアクセスすることはできません。 – G0dsquad

答えて

0

あなたはそれが

console.log('Subtypes:', products.subTypes.name); 
0

あなたが最初にあなたのオブジェクトからそれらを抽出する必要がありproduct.subTypesにアクセスしたい場合はチェックすることができます。

これはあなたのやり方です。 3つの関数の例:純粋なjavascript、ES6、アンダースコア。あなたが製品のようなものを必要とInfactは

// pure JS 
 
function pureJsloop(data) { 
 
    var result = []; 
 

 
    for (i = 0; i < data.length; i++) { 
 
    var product = data[i]; 
 
    
 
    result.push(product.subTypes); 
 

 
    } 
 
    
 
    return result[0]; 
 
} 
 

 
// ES6 
 
function ES6loop(data) { 
 
    // We are returning reduced array 
 
    return data.reduce((previous, product) => { 
 
    return previous = [ ...previous, product.subTypes ]; 
 
    }, [])[0]; 
 
} 
 

 
// Underscore 
 
function underscoreLoop(data) { 
 

 
    return _.reduce(data, function(previous, product){ 
 
    return previous = [ ...previous, product.subTypes ]; 
 
    }, [])[0]; 
 
    
 
} 
 

 

 
var products = [ 
 
       { 
 
       id: 1, 
 
       name: "Product 1", 
 
       subTypes: [ 
 
        { 
 
        id: 1, 
 
        name: "Product 1 - Sub Type 1" 
 
        }, 
 
        { 
 
        id: 2, 
 
        name: "Product 1 - Sub Type 2" 
 
        } 
 
       ] 
 
       }, 
 
       { 
 
       id: 2, 
 
       name: "Product 2", 
 
       subTypes: [ 
 
        { 
 
        id: 1, 
 
        name: "Product 2 - Sub Type 1" 
 
        }, 
 
        { 
 
        id: 2, 
 
        name: "Product 2 - Sub Type 2" 
 
        } 
 
       ] 
 
       }]; 
 
       
 

 

 
//console.log(pureJsloop(products)); 
 
//console.log(ES6loop(products)); 
 
console.log(underscoreLoop(products));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

関連する問題