削除方針
削除方針が不明ですが、「破壊的に特定の要素を削除する方針」と仮定します。
※配列でこの状況なら、Array.prototype.filter
を使う人が多いと思われますが、破壊的動作が必ずしも非推奨とは思いません。
データの持ち方次第では、配列やオブジェクトの値を直接か聞かるべき状況もあります。
ただ、とりあげられた記事のコードでいうなら、new Map
向きのオブジェクトだと思いました(後述参照)。
Array.prototype.splice
Array.prototype.splice
で任意の要素を破壊的に削除できます。
JavaScript
1var commodity = [
2 {"name":"apple","price":300},
3 {"name":"orange","price":200},
4 {"name":"banana","price":250}
5];
6
7commodity.splice(1, 1); // index=1の要素を削除する
8console.log(JSON.stringify(commodity)); // [{"name":"apple","price":300},{"name":"banana","price":250}]
delete 演算子
delete
演算子でも任意の要素を削除可能ですが、Array.prototype.splice
と異なり、他要素のindex値に影響を与えません。
JavaScript
1var commodity = [
2 {"name":"apple","price":300},
3 {"name":"orange","price":200},
4 {"name":"banana","price":250}
5];
6
7delete commodity[1]; // index=1の要素を削除する
8console.log(ommodity); // [{"name":"apple","price":300},,{"name":"banana","price":250}]
この挙動は配列の走査手段に影響しますので、「spliteと比較して、どちらが要件に適うのか」を吟味する必要があります。
new Map
https://qiita.com/snst-lab/items/e5b86fe5fb74903180c7
こちらのコード事例なら、new Map
を使うと、よりエレガントに書けます。
JavaScript
1const fruitsMap = new Map([['apple', 300], ['orange', 200], ['banana', 250]]);
2
3console.log(JSON.stringify([...fruitsMap])); // [["apple",300],["orange",200],["banana",250]]
4fruitsMap.set('apple', 400);
5console.log(fruitsMap.get('apple')); // 400
6console.log(JSON.stringify([...fruitsMap])); // [["apple",400],["orange",200],["banana",250]]
7console.log(fruitsMap.size); // 3
8
9fruitsMap.delete('orange');
10console.log(fruitsMap.has('orange')); // false
11console.log(fruitsMap.size); // 2
12console.log(JSON.stringify([...fruitsMap])); // [["apple",400],["banana",250]]
13
14fruitsMap.clear();
15console.log(JSON.stringify([...fruitsMap])); // []
16console.log(fruitsMap.size); // 0
更新履歴
- 2019-05-23 21:57:43 「削除方針」で
Array.prototype.filter
に言及
Re: Tanaka2319 さん