首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个循环嵌套的重构

每个循环嵌套的重构
EN

Stack Overflow用户
提问于 2016-10-12 10:50:51
回答 2查看 1.9K关注 0票数 4

下面的代码可以迭代来自对象的贴纸信息。为此,我对每个都使用两个嵌套的。在提交中是否有更好的方法来重构下面的代码而不使用嵌套的forEach或任何更好的建议。

代码语言:javascript
复制
var stickers = [];
_.forEach(data.families.categories, function (category) {
    _.forEach(category.stickers, function (sticker) {
        stickers.push(sticker);
    });
});

下面是对象示例

代码语言:javascript
复制
var data = {
  "families": {
    "id": "my_family",
    "categories": [
      {
        "label": "sample-1",
        "id": "family-0",
        "stickers": [
          "aa",
          "bb",
          "cc"
        ]
      },
      {
        "label": "US",
        "id": "family-1",
        "stickers": [
          "DD",
          "EE"
        ]
      },
      {
        "label": "sample-2",
        "id": "family-2",
        "stickers": [

        ]
      },
      {
        "label": "sample-3",
        "id": "family-3",
        "stickers": [
          "FF",
          "GG",
          "HH",
          "II",
          "JJ"
        ]
      }
    ]
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-12 11:29:09

Lodash提供了flatMap函数,它可以做您想做的事情:

代码语言:javascript
复制
var stickers =_.flatMap(data.families.categories, 'stickers');

代码语言:javascript
复制
	var data = {
  "families": {
    "id": "my_family",
    "categories": [
      {
        "label": "sample-1",
        "id": "family-0",
        "stickers": [
          "aa",
          "bb",
          "cc"
        ]
      },
      {
        "label": "US",
        "id": "family-1",
        "stickers": [
          "DD",
          "EE"
        ]
      },
      {
        "label": "sample-2",
        "id": "family-2",
        "stickers": [

        ]
      },
      {
        "label": "sample-3",
        "id": "family-3",
        "stickers": [
          "FF",
          "GG",
          "HH",
          "II",
          "JJ"
        ]
      }
    ]
  }
}
    
    var stickers =_.flatMap( data.families.categories, 'stickers');

document.getElementById('result').textContent = JSON.stringify(stickers);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

<p>
  <pre id="result"></pre>
</p>

票数 2
EN

Stack Overflow用户

发布于 2016-10-12 10:58:10

您可以结合使用Array#reduceArray#concat

代码语言:javascript
复制
var data = { "families": { "id": "my_family", "categories": [{ "label": "sample-1", "id": "family-0", "stickers": ["aa", "bb", "cc"] }, { "label": "US", "id": "family-1", "stickers": ["DD", "EE"] }, { "label": "sample-2", "id": "family-2", "stickers": [] }, { "label": "sample-3", "id": "family-3", "stickers": ["FF", "GG", "HH", "II", "JJ"] }] } },
    stickers = data.families.categories.reduce(function (r, category) {
        return r.concat(category.stickers);
    }, []);

console.log(stickers);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39996748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档