如何在javascript中将哈希的json哈希转换为数组哈希?

时间:2010-12-07 16:26:39

标签: javascript json mustache

所以,如果我有:

var hashof = {"stuff":
{"1": { "name": "fred"}},
{"2": { "name": "barney"}}
};

如何使用javascript函数获取:

var hashof = {"stuff":
["name" : "fred"],
["name" : "barney]
};

我希望能够使用mustache.js的结构。

4 个答案:

答案 0 :(得分:2)

后者是不可能的。它无效。你可能想要这样的东西:

var hashof = {"stuff": [
    {"name" : "fred"},
    {"name" : "barney"}
] };

以下内容应根据您的需要进行转换:

function convert(input) {
    var output = [],
        key;

    for (key in input.stuff) {
        if (input.stuff.hasOwnProperty(key)) {
            output[parseInt(key, 10)] = input.stuff[key];
        }
    }

    return {stuff: output};
}

请记住,生成的数组可能稀疏。如果您想避免这种情况,可以使用替换

output[parseInt(key, 10)] = input.stuff[key];

output.push(input.stuff[key]);

但是你将无法保留原始密钥(至少不能确保)。

答案 1 :(得分:1)

Javascript没有关联数组。相当于" hash"当你正在调用它或一个物体时,它实际上就是它。你可以期待的最好的是:{"stuff": [{"name": "fred"}, {"name": "barney"}]}

以下是未经测试的,但至少应该指向正确的方向。

var input = {"stuff": {"1": { "name": "fred"}}, {"2": { "name": "barney"}} },
    output = {}, key, innerKey;
for key in input
{
    output[key] = [];
    for innerkey in input[key]
    {
        output[key].push(input[key][innerKey]);
    }
}

修改 似乎输入对象没有我期望的格式(或者,实际上,我第一次读取它时读取的格式)。它目前有两个属性:

  • "东西"等于{"1": {"name": "fred"}}
  • 还有另一个未加密项目,等于{"2": {"name": "barney"}}(密钥可能为0,我不确定这一点)

因此,input.stuff只有一个项目,input[0]有另一个项目。如果如下,那就更有意义了:

var input = {
    "stuff": {
        "1": {"name": "fred"},
        "2": {"name": "barney"}
    }
}

如果是这种情况,我上面的代码就可以了。根据给出的输入,它不会。

答案 2 :(得分:0)

javascript中的数组只能有数字索引,你需要使用Object来获得关联数组。

  

数组是一组有序的值   与单个变量相关联   名称。请注意,您不应该使用它   作为关联数组,使用Object   代替。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array

答案 3 :(得分:0)

我真的应该对此进行测试,但快速而肮脏看起来它会起作用......

 $.each(hashof.stuff, function(index, val) {
     hashof.stuff[index] = val.index;
  });