Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的数组可以被删除吗?_Javascript_Arrays_Javascript Objects - Fatal编程技术网

javascript中的数组可以被删除吗?

javascript中的数组可以被删除吗?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我正在经历创建一组数组的过程,使用push()添加元素,并根据用于在ui上获取元素的过程,使用一组元素返回几个数组 所以我就这样结束了 [Object, Object, Object] 0: Object parcels: Array[1] ref: "IDE25.8.2013.0637548291" region: "remote" service: "Early Delivery" totalPrice: 210 weight: "1" 1: Object pa

我正在经历创建一组数组的过程,使用push()添加元素,并根据用于在ui上获取元素的过程,使用一组元素返回几个数组

所以我就这样结束了

[Object, Object, Object]
0: Object
  parcels: Array[1]
  ref: "IDE25.8.2013.0637548291"
  region: "remote"
  service: "Early Delivery"
  totalPrice: 210
  weight: "1"

1: Object
  parcels: Array[1]
  ref: "IDE25.8.2013.1507892643"
  region: "remote"
  service: "Saturday"
  totalPrice: 135.67
  weight: "1"

2: Object
  parcels: Array[1]
  ref: "IDE25.8.2013.1507432643"
  region: "remote"
  service: "Saturday"
  totalPrice: 115.67
  weight: "1"
根据我所学到的,为了“删除”其中一个对象,您需要添加删除

所以我用

delete consignmentsArr[1];
现在我假设delete会删除数组,但它不会。剩下的就是所谓的稀疏数组。因此数组不存在,因为它的元素和对象没有定义,但它仍然作为一个数组存在于数组组的索引中

[Object, undefined × 1, Object]
但是,这会破坏使用ui元素创建的逻辑,ui元素显示其他数组中的元素

我并不是真的想找出如何在我的应用程序中解决这个问题。 我想知道的是,为什么这是javascript中的默认行为?为什么一个delete不仅仅是顾名思义的delete,然后根据仍然存在的对象对索引重新排序?为什么让它作为稀疏数组在开发过程中会有任何好处?也。。。为什么不改名为

sparse consignmentsArr[1];

我想你是想用这种方法


Delete
用于从对象中删除属性。

以下是Javascript
Delete
操作符(用于数组)的可能解释:

对于Javascript数组,
delete
操作是
O(1)
,因为它只是将随机访问数组的值变为
未定义的

这样重新组织数组索引的操作(在伪javascript中):

a=[1,2,3]
->
删除a[1]
->a现在是
[1,3]

将是
O(N)
,因为在最坏的情况下,您将删除第一个元素,并且必须移动数组的其余部分

请参阅并阅读标题“效率”下的部分

添加: 对数组上的
delete
操作符行为的另一种解释是,数组上的
delete
操作符与其他对象上的
delete
操作符执行相同的操作

如果我有一个给定的对象:
a={'hi':'hello','bye':'good'}
并且我
删除了一个['hi']
,那么
a['hi']
将变成
未定义的

如果我有一个数组
arry=[1,2,3]
,那么
delete arry[1]
那么
arry[1]
也会变成
未定义的

“删除”操作符从对象中删除属性

您可以使用以下任一选项

delete object.property
delete object['property']
delete
不是数组上的运算符。这就是为什么对索引重新排序不适用于
delete
上下文的原因

您仍然可以使用splice从数组中完全删除项并重新排序索引

arr.splice(1, 1);

我认为,
delete
操作符并不意味着删除数组中的项,它只是意味着从给定的索引中取消对象的链接

试想一下,托运货物是一个集装箱,里面有三个箱子。
每个盒子里都有一个苹果。
delete commitmentsarr[1]
表示将苹果从第二个盒子中拿走。

你认为以前的第三个盒子现在是第二个盒子吗^_^

重新排序索引可能非常耗时。这可能就是为什么它不是由default完成的。您可以使用splice来删除一个项目,如图所示:这是否意味着“delete”语法是遗留的?实际上,我是从splice方法开始的。但是从我所知道的,拼接会移除数组的元素,而不是数组本身。当我使用splice时,即使在(1,1)的情况下,它也会删除多于1个数组。但这并不是我在这里要问的。如果你想删除数组,你必须确保它是一个对象的属性,所以
var a=[];删除一条不起作用,您必须执行
此操作。a=[];删除这个。a'
这个
可以是其他对象,甚至是窗口)。这就是我感到困惑的地方,因为拼接也可以用于array@gerdi:“拼接也可用于阵列中对象的元素”-我不明白。根据本文档,mozilla splice的目标是数组的元素,而不是数组对象itself@gerdi:Splice删除项目并重新排列数组本身的索引。你还需要什么吗?我不想移除物品。。我想删除一个阵列这对开发目的有什么帮助?很可爱的是,您正在使用框来描述此场景,但是这些框的表示与基于用户输入的操作定义的ui元素相链接。我想删除盒子而不是苹果。应该有三个盒子,每个盒子都有苹果。这说明了一个很好的观点,删除就是取消一个对象的链接。这意味着垃圾收集器将知道它没有更多的现有引用,现在可以安全地删除它。
arr.splice(1, 1);