可以删除javascript中的数组吗?

时间:2013-09-25 12:29:02

标签: 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
  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];

现在我假设删除会删除数组,但事实并非如此。剩下的就是所谓的稀疏阵列。所以数组不存在,因为它不能被使用,因为它的元素和对象没有定义,但它仍然存在于数组的索引中作为

[Object, undefined × 1, Object]

然而,这破坏了使用ui元素创建的逻辑,这些元素显示了其他数组中的元素。

我并不是真的想知道如何在我的应用程序中解决这个问题。 我想知道它为什么这是javascript中的默认行为?为什么删除不仅仅是名称所暗示的删除,然后根据仍然存在的对象重新排序索引?为什么将它作为稀疏数组留在开发过程中有任何好处?另外......为什么不重命名为

sparse consignmentsArr[1];

4 个答案:

答案 0 :(得分:1)

我认为您的意思是使用splice方法。

consignmentsArr.splice(1, 1);

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

答案 1 :(得分:1)

以下是Javascript delete运算符的可能解释(在数组中使用):

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

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

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

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

请参阅http://en.wikipedia.org/wiki/Array_data_structure并阅读标题效率下的部分。

<强>增加: 对数组上delete运算符的行为的另一种解释是,数组上的delete运算符与其他对象上的delete运算符完全相同。

如果我有一个给定的对象:a = {'hi': 'hello', 'bye': 'good bye'}而我delete a['hi']a['hi']变为undefined

如果我有一个数组arry = [1,2,3],那么delete arry[1]arry[1]也变为undefined

答案 2 :(得分:1)

我认为,delete运算符并不意味着删除数组中的项,它只是意味着将对象与您给出的索引取消链接。

考虑consignmentsArr是一个容器,其中有三个框 每盒都有一个苹果 delete consignmentsArr[1]表示将苹果从第二个盒子中取出 你认为之前的第三个盒子,现在是第二个盒子吗? ^ _ ^

答案 3 :(得分:0)

  

删除操作符从对象中删除属性。

您可以使用以下任意一种

delete object.property
delete object['property']

delete不是数组上的运算符。这就是为什么重新排序索引不适用于delete

的上下文

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

arr.splice(1, 1);