为什么我不能在Javascript深度克隆数组上执行forEach?

时间:2012-10-25 20:54:54

标签: javascript arrays clone

这为我提供了数字1,2和3的警报。

[1,2,3].forEach(alert);

这给了我一个错误:

$.extend(true, {}, [1,2,3]).forEach(alert);

错误:

TypeError: Object #<Object> has no method 'forEach'

为什么会发生这种情况,如何循环克隆对象?

4 个答案:

答案 0 :(得分:5)

您的.extend()调用正在创建普通对象,而不是数组。 (也就是说,你实际上并没有创建一个“深度克隆数组”。)在普通对象上没有像.forEach这样的迭代器。

答案 1 :(得分:2)

原因很简单,因为数组[]forEach个方法,对象{}没有。

如果你有一个对象数组,你可以通过数组forEach 如果你有一个对象,其中一个属性是一个数组,你可以forEach通过数组obj.arr.forEach。 如果你有一个数组数组,每个数组都有对象,数组作为属性,你可以设置一个函数,通过外部数组forEach,然后通过内部数组的对象forEach,然后访问持有数组的对象的属性,然后forEach通过它。

但你不能{}.forEach使用vanilla JS。

答案 2 :(得分:0)

我认为你想要的方法是 .each()

没关系,我误解了你的问题...

答案 3 :(得分:0)

如果要遍历对象数组,可以使用

var numbs = $.extend(true, {}, [1,2,3]);

for (var numb in numbs){
    alert(numbs[numb]);
}

小提琴。 http://jsfiddle.net/v6KFn/