1

キーが md5 文字列で、値がオブジェクト [0315778255cca8d2f773642ad1d3678f] = {a:12,b:34} であるオブジェクトの配列があります。キーに基づいて配列要素を削除する必要があります。スプライスを試みましたが、キーが数値ではないため失敗しました。私も位置でつなぎ合わせようとしましたが、それは失敗し、要素を削除することさえしましたが、それが理想的ではないことは誰もが知っています.

実装を配列からオブジェクトに変更することもできますが、それにも多かれ少なかれ同じ問題があると思います。

どんなアイデアでも大歓迎です

4

1 に答える 1

2

splice実際、配列のインデックスに関するものであり (配列の数値プロパティが呼び出されるため)、他のプロパティに関するものではありません。

オブジェクト (配列を含む) からプロパティを削除するには、次を使用しますdelete

delete theArray['0315778255cca8d2f773642ad1d3678f'];

他の言語の「削除」と似てdeleteいますが、JavaScript ではメモリ管理とは (直接) 関係ありません。undefinedオブジェクトからプロパティを削除するだけです (完全に; プロパティの値を何かに設定するだけではありません)。

補足:数値以外のプロパティのみを使用している場合は、おそらく配列はまったく必要ありません。JavaScript の型を使用する唯一の理由はArray、名前がすべて数字であるプロパティ、魔法length(数値プロパティのみに関連する)、およびからのものをArray.prototype 与える特別な処理が必要な場合です。インデックス プロパティ。


以下のコメントを再確認してください。

delete は要素の場所に undefined を残します。私はそれを完全に取り除く必要があります

いいえ、deleteプロパティを完全に削除します。その場に留まらないundefined。存在しないオブジェクトからプロパティを取得しようとすると、undefined. 例えば:

var obj = {};            // Object with no "foo" property at all
var x = obj.foo;
console.log("x = " + x); // "x = undefined"

hasOwnPropertyまたはを使用して、プロパティが実際に削除されたことを証明できますin

var obj = {};
console.log('foo' in obj);              // "false"
console.log(obj.hasOwnProperty('foo')); // "false"

inオブジェクトとそのプロトタイプ チェーンをチェックします。hasOwnPropertyオブジェクト自体をチェックするだけです。

に戻るdelete:

var obj = {};
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj.foo;
console.log(obj.hasOwnProperty('foo')); // "false"
obj.foo = "bar";
console.log(obj.hasOwnProperty('foo')); // "true"
delete obj['foo'];
console.log(obj.hasOwnProperty('foo')); // "false"

実例| ソース

が有効な識別子である場合、delete obj.foo;との両方が機能することに注意してください。ただし、名前が有効な識別子ではないプロパティ (md5 の合計など) については、上記で示したように、文字列と共に角かっこで囲まれた形式を使用する必要があります ( )。delete obj['foo'];foodelete theArray['0315778255cca8d2f773642ad1d3678f'];

于 2012-06-10T12:31:16.890 に答える