1

一連の配列を作成し、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"

オブジェクトの1つを「削除」するために学んだことから、削除を追加する必要があります

だから私は使う

delete consignmentsArr[1];

ここで、削除すると配列が削除されると想定しますが、そうではありません。1 つは、スパース配列と呼ばれるものが残ります。したがって、配列は存在せず、使用できません。その要素とオブジェクトは定義されていませんが、配列のグループのインデックスに

[Object, undefined × 1, Object]

ただし、これにより、他の配列の要素を表示する ui 要素で作成されたロジックが破棄されます。

私のアプリケーションでこの問題を解決する方法を実際に見つけようとしているわけではありません。私が知りたいのは、なぜこれがjavascriptのデフォルトの動作なのですか? 削除は、名前が示すように単なる削除ではなく、まだ存在するオブジェクトに基づいてインデックスを並べ替えるのはなぜですか? スパース配列のままにしておくと、開発プロセスでメリットがあるのはなぜですか? また...名前を変更してみませんか

sparse consignmentsArr[1];
4

4 に答える 4

1

スプライス法を使用するつもりだと思います。

consignmentsArr.splice(1, 1);

Deleteオブジェクトからプロパティを削除するためのものです。

于 2013-09-25T12:33:55.407 に答える
1

以下は、Javascriptdelete演算子の考えられる説明です (配列で使用される場合):

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を参照して、ヘッダーEfficiencyの下の部分を読んでください。

追加: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ます。

于 2013-09-25T12:38:07.090 に答える
0

delete 演算子は、オブジェクトからプロパティを削除します。

次のいずれかを使用できます

delete object.property
delete object['property']

delete配列の演算子ではありません。そのため、インデックスの並べ替えは のコンテキストでは適用できませんdelete

splice を使用して、配列からアイテムを完全に削除し、インデックスを並べ替えることができます。

arr.splice(1, 1);
于 2013-09-25T12:41:43.687 に答える