在 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 中覆盖数组的主要内容,如果未能解决你的问题,请参考以下文章