【问题标题】:Javascript - convert string to associative array and summarize by valueJavascript - 将字符串转换为关联数组并按值汇总
【发布时间】:2018-07-12 06:16:16
【问题描述】:

这是我第一次使用 javascript。我有以下字符串:

document.write(str)
[{"company":1,"number_employees":5},
{"company":4,"number_employees":25},
{"company":5,"number_employees":5},
{"company":2,"number_employees":5},
{"company":4,"number_employees":25}]

我需要转换这个字符串,以便我根据 number_employees 将它们汇总如下:

Three companies have number_employees=5 and two companies have number_employees=25

我目前正在努力将字符串转换为 javascript 对象。有了关联数组后,我可以将其转换为 map 并计算 number_employees。

s_obj = eval('({' + messageBody + '})');
var result = s_obj.reduce(function(map, obj) {
    map[obj.key] = obj.val;
    return map;
}, {});

这给了我以下错误:

VM181:1 Uncaught SyntaxError: Unexpected token ,
at onMessage ((index):41)
at WebSocket.<anonymous> (stomp.min.js:8)

任何帮助/提示/指导将不胜感激!

【问题讨论】:

  • 首先,使用JSON.parse,而不是eval
  • var s_obj = JSON.parse(messageBody);
  • 那不是字符串。它也不是有效的 JavaScript。除了document.write(str) 和缺少引号外,它看起来像 JSON。 (在这种情况下,你会做JSON.parse('[{"company":1,...}]))

标签: javascript object hashmap associative-array summarize


【解决方案1】:

对你的数据做几个假设,你可以尝试这样的事情:

首先,使用 JSON 对象将 JSON 字符串转换为对象,然后在您尝试使用 Array.prototype.reduce 进行总结时 - (您的参数颠倒了)

var summary = {};
var messageBody = '[{"company":1,"number_employees":5},{"company":4,"number_employees":25},{"company":5,"number_employees":5},{"company":2,"number_employees":5},{"company":4,"number_employees":25}]';

JSON.parse(messageBody).reduce( (acc, cur) => {
    acc[cur.number_employees] = (acc[cur.number_employees] || 0) + 1;
    return acc;
}, summary);
for(entry of Object.keys(summary)) {
    if (summary.hasOwnProperty(entry)) {
        console.log(`There are ${summary[entry]} companies with ${entry} employees`);
    }
}

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 2016-07-21
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2018-03-08
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多