2

所以如果我有:

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

如何使用 javascript 函数获取:

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

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

4

4 回答 4

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]);

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

于 2010-12-07T16:28:52.047 回答
1

Javascript 没有关联数组。等价物是您所称的“散列”,或实际上是对象。你能期待的最好的结果是:{"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"}
    }
}

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

于 2010-12-07T16:34:57.133 回答
0

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

 $.each(hashof.stuff, function(index, val) {
     hashof.stuff[index] = val.index;
  });
于 2010-12-07T16:36:06.157 回答
0

javascript中的数组只能有数字索引,您需要使用Object才能拥有关联数组。

数组是与单个变量名关联的一组有序值。请注意,您不应将其用作关联数组,而应使用 Object 。

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

于 2010-12-07T16:30:54.180 回答