如何使用underscorejs获取嵌套对象的内部数组?

时间:2015-02-22 14:28:32

标签: javascript underscore.js

我得到一组代表书籍的对象。本书有嵌套的章节,每章都有嵌套的页面。我正在尝试使用pages和该章的名称来where and/or chain但不知道如何引用pages来迭代并获得name和{{1} }。我的方法都没有用,显然我错过了一个重要的理解。

keyword

嵌套数据:

var getPages = function(book, n) {

    _.chain(book.chapters).where({name:n})...how do I refer pages array from here?;

    or

    _.select(_.where(book.chapters,{name:n}), function(p) {
         return p.keyword + p.name;
    };

};

1 个答案:

答案 0 :(得分:3)

你几乎就在那里,只从所有返回的值中获取pages属性并将它们展平为

function getPages(book, n) {
    return _.chain(book.chapters).where({
            name: n
        })
        .map(function(currentObject) {
            return currentObject.pages;
        })
        .flatten()
        .value();    
}

<强>输出

[ { name: 'page 10', keyword: 'objects', status: 'passed' },
  { name: 'page 40', keyword: 'methods', status: 'failed' },
  { name: '', keyword: '', status: '' } ]

这里,_.where返回一个数组,我们只是遍历数组并创建一个只有来自各个对象的pages对象的新数组。由于可能有多个匹配,结果将是一个页面数组的数组,因此我们将它展平并最终获取值并返回它。