在 JavaScript 中覆盖数组

Posted

技术标签:

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

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

【问题讨论】:

您能否提供一个代码示例让我们看看为什么array = new_array 代码不起作用? 【参考方案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);

【讨论】:

以上是关于在 JavaScript 中覆盖数组的主要内容,如果未能解决你的问题,请参考以下文章

将 PHP 转换为 JavaScript。将键/值存储到数组中

js数组

学习Javascript

Javascript:重构对象数组而不覆盖键

Javascript科学记数法覆盖

手把手5分钟入门JavaScript数组,万字文超详细手绘操作执行过程②JavaScript数据结构与算法系列