2017-04-03 113 views
0

我有以下對象數組: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" 
      } 
     ] 
    } 
]; 

使用underscore.js爲什麼下面點號無法登錄任何安慰:

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

我可以只需按照以下方法嵌套foreach循環來實現它的工作?

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

沒有products.subTypes逸岸你需要像產品[0] .subTypes和產品[1] .subTypes等 –

+0

你的最後一段代碼上面是完全正確的假設。你有一個對象數組作爲一個對象數組中的一個屬性 - 你需要循環兩次。您無法使用'products.subTypes'訪問它,因爲它試圖訪問單個對象的屬性。 – G0dsquad

回答

0

你可以檢查一下

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

如果你想訪問你必須首先從你的對象提取它們product.subTypes。

下面是你是如何做到的。 3個示例函數:純JavaScript,ES6,下劃線JS。

// 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>