【问题标题】:How to count values in a nested array using Lodash?如何使用 Lodash 计算嵌套数组中的值?
【发布时间】:2021-10-20 11:27:19
【问题描述】:

我正在尝试使用 Lodash 计算 users.hobbies 的唯一计数。数据如下所示:

var users = [
  { 'user': 'barney', 'age': 36, 'hobbies': ['soccer','basketball']  },
  { 'user': 'fred',   'age': 40, 'hobbies': ['soccer', 'golf'] },
  { 'user': 'tom',   'age': 25,  'hobbies': ['golf'] }
];

我试过了:

_.countBy(users, 'hobbies');
// { 'soccer,basketball': 1, 'soccer,golf': 1, golf: 1 }

想要的输出是:

// { 'soccer':2, 'basketball':1, 'golf':2}

我想我需要split users.hobbies 的值,但我不确定如何应用它。

【问题讨论】:

  • 使用:_.countBy(_.flatten(users.map(u => u.hobbies)))

标签: javascript lodash


【解决方案1】:

你可以先把爱好扁平化:

const users = [
  { 'user': 'barney', 'age': 36, 'hobbies': ['soccer','basketball']  },
  { 'user': 'fred',   'age': 40, 'hobbies': ['soccer', 'golf'] },
  { 'user': 'tom',   'age': 25,  'hobbies': ['golf'] }
];

const count = _.countBy(users.flatMap(user => user.hobbies));
console.log(count);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

【讨论】:

    【解决方案2】:

    不确定 lodash,但这里是原生 js 的解决方案

    users.reduce((total, el) => {
        el.hobbies.forEach(el => {
            if (el in total) total[el]++
            else total[el] = 1
        })
        return total
    }, {})
    

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2017-09-04
      • 2017-02-19
      • 2016-06-24
      相关资源
      最近更新 更多