【问题标题】:Why can't I do forEach on a Javascript deep cloned array?为什么我不能在 Javascript 深度克隆数组上执行 forEach?
【发布时间】:2012-10-16 03:21:39
【问题描述】:

这会提醒我数字 1、2 和 3。

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

这给了我一个错误:

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

错误:

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

为什么会发生这种情况,我怎样才能遍历克隆的对象?

【问题讨论】:

  • 您将数组克隆到一个空对象,而不是另一个数组。 forEachArray 对象的函数。
  • $.extend(true, [], [1,2,3]).forEach(alert); 工作得很好。

标签: javascript arrays clone


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      没关系,我看错了你的问题...

      【讨论】:

        【解决方案4】:

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

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

        在小提琴中工作。 http://jsfiddle.net/v6KFn/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-01
          • 2010-10-22
          • 1970-01-01
          • 2013-04-28
          • 2011-10-17
          • 1970-01-01
          相关资源
          最近更新 更多