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

How to get inner array of nested object using underscorejs?

我得到一组表示书籍的对象。书有嵌套的章节,每一章都有嵌套的页面。我正在尝试使用 where and/or chain 和章节名称到达 pages,但不知道如何引用 pages 来迭代并获得 namekeyword。 None 我的方法奏效了,显然我缺少一个关键的理解。

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

};

嵌套数据:

{
  "name": "Javascript for Dummies",
  "chapters": [
    {
      "name": "Introduction",
      "status": "passed",
      "pages": [
        {
          "name": "page 10",
          "keyword": "objects",
          "status": "passed"
        },
        {
          "name": "page 40",
          "keyword": "methods",
          "status": "failed"
        },
        {
          "name": "",
          "keyword": "",
          "status": ""
        }
      ]
    },
    {
      "name": "Data Types",
      "status": "passed",
      "pages": [
        {
          "name": "page 33",
          "keyword": "Strings",
          "status": "passed"
        },
        {
          "name": "",
          "keyword": "",
          "status": ""
        },
        {
          "name": "",
          "keyword": "",
          "status": ""
        }
      ]
    }
  ],
  "status": "failed"
}

你快完成了,只需从所有返回值中获取 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 returns 一个数组,我们只是遍历该数组并创建一个新数组,其中仅包含来自各个对象的 pages 对象。由于可能有多个匹配项,结果将是一个页面数组的数组,所以我们将其展平,最后取值并返回。