8

Chromearray.mapは正常に動作しますが、jQuery.mapは何らかの形で循環参照を生成します。を使用した循環参照の証拠は見当たりませんconsole.logが、JSON.stringifyUncaught TypeError: Converting circular structure to JSONは 2 番目のブロックをスローします。

JSFiddle で実行します: http://jsfiddle.net/langdonx/vQBak/

またはコードを確認してください:

var callback = function(index, element) {
    return {
        "index": index
    };
};

var array1 = ["1", "2"];
var mappedArray1 = array1.map(callback);
console.log(mappedArray1);
var json1 = JSON.stringify(mappedArray1);
console.log(json1);

var jqueryArray2 = $('body > div');
var mappedArray2 = jqueryArray2.map(callback);
console.log(mappedArray2);
var json2 = JSON.stringify(mappedArray2); // Chokes with "Uncaught TypeError: Converting circular structure to JSON"
console.log(json2);​

はい、私は同じコールバックを使用しています。はい、ECMAScriptmapは引数を異なる順序で渡しますが、この例ではすべて単純な型 (文字列、数値) であるため、問題になりません。

4

1 に答える 1

19

jQuery.map()関数は、実際の配列ではなく、配列を含む jQuery オブジェクトを返します。これは重要な違いかもしれません。電話してみてください:

var json2 = JSON.stringify(mappedArray2.get());

への呼び出し.get()は、jQuery オブジェクトではなく実際の配列を返します。

于 2012-07-18T14:05:31.080 に答える