首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在当前索引中计数特定对象属性名称的条目

在当前索引中计数特定对象属性名称的条目
EN

Stack Overflow用户
提问于 2017-11-15 09:31:25
回答 2查看 27关注 0票数 2

如何有效地计算当前对象索引中特定对象属性的.length?

我是否需要遍历每个content.item索引,然后遍历content.item.itemSettings.item.monsters,并在途中进行“手动”计数?

在下面,im试图计算每个content.item的特定属性,其中im试图计数的属性是“怪物”:

代码语言:javascript
复制
content.item.itemSettings.item.monsters
  • content.item的第一个(索引)计数预计为=4
  • content.item的第二个(索引)计数1预计为=3
代码语言:javascript
复制
var content = {
  item: [{
      mainId: 50,

      itemSettings: {
        item: [{
            level: 1,

            monsters: [{
                name: 'monster 1',

                item: [{
                  innerLabel: 'blue',
                  year: [{
                      yearVal: 2016,
                      yearStat: 70,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 30,
                    }
                  ]
                }]
              },
              {
                name: 'monster 2',

                item: [{
                  innerLabel: 'pink',
                  year: [{
                      yearVal: 2016,
                      yearStat: 20,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 90,
                    }
                  ]
                }]
              },
            ]
          },
          {
            level: 1,

            monsters: [{
                name: 'monster 3',

                item: [{
                  innerLabel: 'gray',
                  year: [{
                      yearVal: 2016,
                      yearStat: 50,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 55,
                    }
                  ]
                }]
              },
              {
                name: 'monster 4',

                item: [{
                  innerLabel: 'red',
                  year: [{
                      yearVal: 2016,
                      yearStat: 20,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 100,
                    }
                  ]
                }]
              },
            ]
          },
        ] //mainId
      }, //itemSettings
    }, //content.item

    //NEW
    {
      mainId: 60,

      itemSettings: {
        item: [{
            level: 2,

            monsters: [{
                name: 'monster 2-1',

                item: [{
                  innerLabel: 'blue',
                  year: [{
                      yearVal: 2016,
                      yearStat: 70,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 30,
                    }
                  ]
                }]
              },
              {
                name: 'monster 2-2',

                item: [{
                  innerLabel: 'pink',
                  year: [{
                      yearVal: 2016,
                      yearStat: 20,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 90,
                    }
                  ]
                }]
              },
            ]
          },
          {
            level: 2,

            monsters: [{
              name: 'monster 2-3',

              item: [{
                innerLabel: 'gray',
                year: [{
                    yearVal: 2016,
                    yearStat: 50,
                  },
                  {
                    yearVal: 2012,
                    yearStat: 55,
                  }
                ]
              }]
            }, ]
          },
        ] //mainId
      }, //itemSettings
    }, //content.item

  ]
}; //content
EN

回答 2

Stack Overflow用户

发布于 2017-11-15 09:59:04

为此您可以使用reduce。(如果您不理解代码中的任何内容,请询问)

代码语言:javascript
复制
var length = content.item.reduce((sum, value) => {
  return sum + Object.values(value.itemSettings.item).reduce((isum, ivalue) => {
    return isum + ivalue.monsters.length;
  }, 0);
}, 0);

工作代码:

代码语言:javascript
复制
var content = {
  item: [
    {
      mainId: 50,
      itemSettings: {
        item: [{
            level: 1,

            monsters: [{
                name: "monster 1",

                item: [{
                  innerLabel: "blue",
                  year: [{
                      yearVal: 2016,
                      yearStat: 70,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 30,
                    }
                  ]
                }]
              },
              {
                name: "monster 2",

                item: [{
                  innerLabel: "pink",
                  year: [{
                      yearVal: 2016,
                      yearStat: 20,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 90,
                    }
                  ]
                }]
              },
            ]
          },
          {
            level: 1,

            monsters: [{
                name: "monster 3",

                item: [{
                  innerLabel: "gray",
                  year: [{
                      yearVal: 2016,
                      yearStat: 50,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 55,
                    }
                  ]
                }]
              },
              {
                name: "monster 4",

                item: [{
                  innerLabel: "red",
                  year: [{
                      yearVal: 2016,
                      yearStat: 20,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 100,
                    }
                  ]
                }]
              },
            ]
          },
        ]
      },
    },
   {
      mainId: 60,

      itemSettings: {
        item: [{
            level: 2,

            monsters: [{
                name: "monster 2-1",

                item: [{
                  innerLabel: "blue",
                  year: [{
                      yearVal: 2016,
                      yearStat: 70,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 30,
                    }
                  ]
                }]
              },
              {
                name: "monster 2-2",

                item: [{
                  innerLabel: "pink",
                  year: [{
                      yearVal: 2016,
                      yearStat: 20,
                    },
                    {
                      yearVal: 2012,
                      yearStat: 90,
                    }
                  ]
                }]
              },
            ]
          },
          {
            level: 2,

            monsters: [{
              name: "monster 2-3",

              item: [{
                innerLabel: "gray",
                year: [{
                    yearVal: 2016,
                    yearStat: 50,
                  },
                  {
                    yearVal: 2012,
                    yearStat: 55,
                  }
                ]
              }]
            }, ]
          },
        ]
      },
    }
  ]
};

var length = content.item.reduce((sum, value) => {
    return sum + Object.values(value.itemSettings.item).reduce((isum, ivalue) => {
      return isum + ivalue.monsters.length;
    }, 0);
}, 0);

console.log(length);

票数 0
EN

Stack Overflow用户

发布于 2017-11-15 10:47:59

如果单独需要每个索引的长度,可以使用以下代码:

代码语言:javascript
复制
content.item.map(item =>
  item.itemSettings.item.reduce((count, itemInner) =>
    count + itemInner.monsters.length, 0
  )
);

输出:[4, 3]

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

https://stackoverflow.com/questions/47303746

复制
相关文章

相似问题

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