【问题标题】:How to transform JavaScript hashmap?如何转换 JavaScript 哈希图?
【发布时间】:2013-02-04 11:08:36
【问题描述】:

我正在尝试从 json 对象创建 <String, Array()> 映射。 想象一下我得到了这个 json 结构:

[
    {
        "userId": "123123",
        "password": "fafafa",
        "age": "21"
    },
    {
        "userId": "321321",
        "password": "nana123",
        "age": "34"
    }
]

我要创建的地图是:

键(字符串),值(数组)

{
    "userId": [
        "123123",
        "321321"
    ],
    "password": [
        "fafafa",
        "nana123"
    ],
    "age": [
        "21",
        "34"
    ]
}

可以这样做吗? :/

提前致谢。

【问题讨论】:

  • 没有“json 对象”之类的东西,我看不出您显示的对象是什么。这是你收到的字符串吗?
  • 最好解释一下你想用那个地图做什么,因为它可能是你可以只使用这个对象。
  • 您的“JSON 结构”根本不是 JSON...
  • 我不明白 popnoodles 的编辑...
  • @dystroy OP 使用了未显示的字符,因为它们没有缩进代码。评论前没有对比过两个版本吗?

标签: javascript json map


【解决方案1】:

Demo

var json = '[{"userId" : "123123", "password": "fafafa", "age": "21"}, {"userId" : "321321", "password" : "nana123", "age" : "34"}]';

var list = JSON.parse(json);
var output = {};

for(var i=0; i<list.length; i++)
{
    for(var key in list[i])
    {
        if(list[i].hasOwnProperty(key))
        {
            if(typeof output[key] == 'undefined')
            {
                output[key] = [];
            }
            output[key].push(list[i][key]);
        }
    }
}

document.write(JSON.stringify(output));

输出:

{"userId":["123123","321321"],"password":["fafafa","nana123"],"age":["21","34"]}

【讨论】:

  • 你是个天才!这就是我需要的。谢谢!问题是,如果我不知道所有键名,我如何动态地创建映射到 String、Array()?
  • @user59574 我已经对其进行了编辑,无需定义键。
【解决方案2】:
function mergeAttributes(arr) {
  return arr.reduce(function(memo, obj) { // For each object in the input array.
    Object.keys(obj).forEach(function(key) { // For each key in the object.
      if (!(key in memo)) { memo[key] = []; } // Create an array the first time.
      memo[key].push(obj[key]); // Add this property to the reduced object.
    });
    return memo;
  }, {});
}

var json = '[{"userId" : "123123", "password": "fafafa", "age": "21"}, {"userId" : "321321", "password" : "nana123", "age" : "34"}]';

mergeAttributes(JSON.parse(json));
// {
//   "userId": ["123123", "321321"],
//   "password": ["fafafa", "nana123"],
//   "age": ["21", "34"]
// }

【讨论】:

  • @user59574:请参阅以下 ECMAScript 第 5 版函数 - Array.reduceObject.keysArray.forEach
  • ECMAScript 5 的不错示例,但请注意这不适用于 Internet Explorer 9 之前的任何版本。
  • @MrCode:是的,非常正确。 IE
  • @maerics 很遗憾,因为该规范中有一些不错的现代功能。
  • @maerics 嘿,现在显示“arr.reduce 不是函数”发生了什么? (火狐和 Chrome):(
【解决方案3】:

Javascript 的 JSON.stringify 将帮助您将任何符合 JSON 的对象模型转换为 JSON 字符串。

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 2017-07-05
    • 1970-01-01
    • 2017-06-20
    • 2015-11-26
    • 2017-12-22
    • 2021-08-26
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多