【问题标题】:Overwrite array in JavaScript在 JavaScript 中覆盖数组
【发布时间】:2010-12-06 01:19:10
【问题描述】:

如何覆盖(或取消设置然后设置)数组?好像"array = new_array" 不起作用。

【问题讨论】:

  • 您能否提供一个代码示例让我们看看为什么array = new_array 代码不起作用?

标签: javascript arrays overwrite unset


【解决方案1】:

要创建一个空数组来分配给变量,可以使用 Array 构造函数:

array = new Array();

或者你可以使用一个空数组字面量:

array = [];

如果您对一个数组有多个引用,因此您必须清空实际的数组对象而不是替换对它的引用,您可以这样做:

array.splice(0, array.length);

【讨论】:

    【解决方案2】:

    我不确定您要做什么,但有几种方法可以重置数组。

    您可以遍历现有数组并将每个索引设置为 null(或空字符串或 0 或您认为重置的任何值):

    for(var i = 0; i < arr.length; i++) {
       arr[i] = null;
    }
    

    您也可以只更新对对象新实例的现有引用:

    arr = [];
    

    【讨论】:

      【解决方案3】:

      这应该可行。

      array1 = array2;
      

      如果不是,请提供更多详细信息。

      【讨论】:

      • 我认为您不需要明确声明 array1 = null。如果你只是更新引用,垃圾收集器应该识别出一个没有引用指向它的实例。
      • 不需要两次赋值;第二个就够了。
      【解决方案4】:

      嗯,看来问题不是我想的那样;我的错误是以下几行,毕竟它们与数组没有任何关系:

      sms.original = eval('(' + data + ')');
      sms.messages = sms.original;
      

      sms.original 变成一个对象,然后 sms.messages 变成 sms.original (我只是希望它们具有相同的值)。这些对象包含一个名为 items 的数组,该数组在 sms.original 对象中保持静态,但是当我更改 sms.messages 原来的对象也发生了变化。解决方法很简单:

      sms.original = eval('(' + data + ')');
      sms.messages = eval('(' + data + ')');
      

      很抱歉打扰您,我应该详细说明,但代码被拆分为多个文件和函数。无论如何,谢谢你们,现在 Guffa 的拼接技术对我有用吗。

      【讨论】:

        【解决方案5】:

        清空数组

        http://2ality.com/2012/12/clear-array.html

        let myArray = [ 1, 2, 3, 4];
        
        myArray = [];
        myArray.length = 0;
        

        【讨论】:

          【解决方案6】:

          使用Slice()

          像这样 -> array = new_array.slice(0);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多