【问题标题】:JavaScript array to dictionary conversation based on count基于计数的 JavaScript 数组到字典对话
【发布时间】:2018-08-01 12:40:49
【问题描述】:

我有一个像下面这样的数组

 data = [A,B,B,B,C,C,A,B]

如何转换成如下格式的字典。

  data = [
  {
    name: "A",
    y: 2
  },
  {
    name: "B",
    y: 4
  },
  {
    name: "C",
    y: 2
  }
]

必须将元素作为名称并将元素的计数作为值转换为 y。

我有一个只接受这种格式的库。 做不到,卡在中间

欢迎提出任何建议。

【问题讨论】:

  • 那么你尝试了什么?
  • 你能摆脱数组而只拥有var obj = {'A': 2, 'B': 4, 'C': 2}这样的对象吗?

标签: javascript arrays dictionary array-map


【解决方案1】:

data = ['A','B','B','B','C','C','A','B'];

var res = Array.from(new Set(data)).map(a =>
  ({name:a, y: data.filter(f => f === a).length}));

console.log(res);

【讨论】:

    【解决方案2】:

    使用array.reduce:

    data = ['A','B','B','B','C','C','A','B'];
    
    var res = data.reduce((m, o) => {
      var found = m.find(e => e.name === o);
      found ? found.y++ : m.push({name: o, y: 1});
      return m;
    }, []);
    
    console.log(res);

    【讨论】:

      【解决方案3】:

      function convert(data){
        var myMap = {}
        data.forEach(el => myMap[el] = myMap[el] != undefined ? myMap[el] + 1 : 1);
        return Object.keys(myMap).map(k => {return {name: k, y: myMap[k]}})
      }
      
      console.log(convert(['A','B','B','B','C','C','A','B']))

      【讨论】:

      • 我会把你的变量称为函数名以外的东西。 myMap 可以工作...
      • @Matt 我也是这么想的。完成。
      猜你喜欢
      • 1970-01-01
      • 2013-03-26
      • 2015-08-04
      • 1970-01-01
      • 2019-06-25
      • 2014-05-25
      • 2015-08-18
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多