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

編集: 入力オブジェクトが私が期待した形式(または、実際、最初に読んだときに読んだ形式)を持っていないようです。現在、2つのプロパティがあります。

  • 「もの」は等しい{"1": {"name": "fred"}}
  • 等しい別{"2": {"name": "barney"}}のキーなしアイテムがあります(キーは0である可能性があります、この点についてはわかりません)

つまり、input.stuff1つのアイテムだけがあり、input[0]別のアイテムがあります。それが次のようであるならば、それはより理にかなっているでしょう:

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

この場合、上記の私のコードは機能します。与えられた入力では、そうではありません。

于 2010-12-07T16:34:57.133 に答える
0

JavaScript の配列は数値インデックスのみを持つことができます。連想配列を持つには Object を使用する必要があります。

配列は、1 つの変数名に関連付けられた値の順序付けられたセットです。連想配列として使用しないでください。代わりに Object を使用してください。

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

于 2010-12-07T16:30:54.180 に答える
0

私は本当にこれをテストする必要がありますが、速くて汚れていてうまくいくようです...

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