私は次のようなオブジェクトを持っています:
_let obj = {foo: 1, bar: 2, baz: 3}
_
削除するプロパティの名前をパラメータとして受け取るメソッドを呼び出して、特定のプロパティを削除したい
_removeProperty(obj, propertyName) {
let { propertyName, _, ...result } = obj
return result
}
_
問題は、このメソッドは、プロパティの名前を構文speadに直接書き込む場合にのみ機能することです。たとえば、_let { bar, _, ...result } = obj
_です。ただし、構文speadがそれを新しい変数
lodashのomit
を除いて、可能であれば別の解決策を使用して、それをどのように行うことができますか
計算されたプロパティを破壊に使用できます。
let obj = {foo: 1, bar: 2, baz: 3}
function removeProperty(obj, propertyName) {
let { [propertyName]: _, ...result } = obj
return result
}
console.log(removeProperty(obj, 'foo'));
これにより、値propertyName
の名前のプロパティが使い捨て変数に割り当てられ、基本的にそのキーが削除されます。 MDNドキュメント を参照してください。
destructuring
のもう1つの代替方法は、delete
を使用することです。次のソリューションは、時間の複雑さをdestructuring
(デスクトップChromeの場合)と比較して約35%削減します
let obj = {foo: 1, bar: 2, baz: 3}
function removeProperty(obj, propertyName) {
let newObj = {...obj};
delete newObj[propertyName];
return newObj;
}
console.log(removeProperty(obj, 'foo'));
結果は、使用するブラウザによって異なります。結果はかなり興味深いものです。デスクトップSafari destructuring
はdelete
より優れていますが、デスクトップChrome outはデスクトップSafariのすべての数値を実行します。
+-----------------------------------+
| Browser | delete | destructure |
+---------+-----------+-------------+
| Chrome | 3,229,791 | 1,993,256 |
| Safari | 1,186,679 | 1,872,396 |
+---------+-----------+-------------+
Chrome=は実際のところSafariなので、iOSでの結果はそれほど驚くべきことではありません。
+-----------------------------------+
| Browser | delete | destructure |
+---------+-----------+-------------+
| Chrome | 1,146,496 | 1,785,551 |
| Safari | 1,182,067 | 1,793,772 |
+---------+-----------+-------------+
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete