2

タイトルが示すように、文字列変数から配列を設定しようとしています。

/*** THIS DOES NOT WORK ***/
var Multi = [];
var test = "[0,1],[1,5],[2,3],[3,10]";
Multi.push(test);


/*** THIS WORKS ***/
var Multi = [];
Multi.push([0,1],[1,5],[2,3],[3,10]);

文字列として保存すると機能しないのはなぜですか? AJAX を介して別の PHP ファイルからこれらの値を取得しているため、文字列で機能させる必要があります。

ありがとう。

4

3 に答える 3

7

[前後に追加することで文字列を有効な JSONに変換]し、 を使用JSON.parse()して JSON 文字列を配列に変換できます。文字列から配列を取得したので、以下に示すようにMulti配列を拡張できます。Multi.push.apply(Multi, array)

var Multi = [];
var test = "[0,1],[1,5],[2,3],[3,10]";
Multi.push.apply(Multi, JSON.parse('[' + test + ']'));

コメントで述べたように、よりクリーンなアプローチは、PHP ファイルが有効な JSON を生成することを確認することです。角かっこを手動で追加する必要がないことを除いて、この答えはすべて同じです。

于 2013-10-15T20:11:09.583 に答える
2

2 つの可能性:

JSON

サーバーが任意のデータ形式ではなく JSON を送信するようにして、次のようにします。

var response = "[[0,1],[1,5],[2,3],[3,10]]"; // JSON data coming as string from somewhere
Multi = JSON.parse(response);

(のドキュメントJSON.parse())

文字列.分割()

数値の配列の配列またはその他の適切に動作するデータのみを受け取る場合は、パターン インスタンスで文字列を分割します。

var response = "[0,1],[1,5],[2,3],[3,10]"; // string coming from somewhere
Multi = response.split(/\s*\]\s*,\s*\[\s*/).map(
    function(s) {
        return s.split(/\s*,\s*/).map(parseInt);
    });
于 2013-10-15T20:18:34.840 に答える
0

読んでいる AJAX 入力を制御できる場合は、次のことを試すことができます。

var Multi = [],
    test = "0,1|1,5|2,3|3,10",
    groups = test.split('|');

for (var i = 0; i < groups.length; i++) {
    var tmpArray = groups[i].split(',');
    Multi.push(tmpArray);
}
于 2013-10-15T20:14:30.513 に答える