簡體   English   中英

如何使用underscore.js獲取嵌套對象的內部數組?

[英]How to get inner array of nested object using underscorejs?

我得到了代表書籍的對象數組。 本書有嵌套的章節,每個章節都有嵌套的頁面。 我正在嘗試使用本章的where and/or chain和名稱到達pages where and/or chain但不知道如何引用pages進行迭代並獲取namekeyword 我的方法都沒有奏效,顯然我缺少關鍵的理解。

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返回一個數組,而我們只是遍歷該數組並僅使用單個對象中的pages對象創建一個新數組。 由於可能存在多個匹配項,因此結果將是一個頁面數組數組,因此我們將其展平,最后獲取值並返回它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM