8

Chromearray.map工作正常,但 jQuery.map以某种方式产生循环引用。我看不到任何使用 循环引用的证据console.log,但 JSON.stringifyUncaught TypeError: Converting circular structure to JSON在第二个块中抛出。

在 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 回答