简体   繁体   English

Underscore.js-遍历对象数组

[英]Underscore.js - Looping through Object Array

I have the following object array: 我有以下对象数组:

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

Using underscore.js why does the following dot notation not log anything to console: 使用underscore.js,为什么以下点符号不将任何内容记录到控制台:

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

I can only get it to work by doing nesting the foreach loops as follows? 我只能通过嵌套如下的foreach循环来使其正常工作吗?

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

你可以检查一下

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

If you would like to access product.subTypes you have to extract them from your objects first. 如果要访问product.subTypes,则必须先从对象中提取它们。

Here is how you do it. 这是您的操作方式。 3 example functions: pure javascript, ES6, underscoreJS. 3个示例函数:纯javascript,ES6,underscoreJS。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM