1. ホーム
  2. javascript

[解決済み] 変異を伴わないオブジェクトからの値の削除

2022-07-20 11:47:47

質問

元のオブジェクトを変異させることなく、特定のキーでオブジェクトから値を削除するための良い方法と短い方法は何でしょうか?

のようなことをしたいのですが。

let o = {firstname: 'Jane', lastname: 'Doe'};
let o2 = doSomething(o, 'lastname');
console.log(o.lastname); // 'Doe'
console.log(o2.lastname); // undefined

このようなタスクのための不変性ライブラリがたくさんあることは知っていますが、私はライブラリなしで済ませたいと考えています。しかし、これを行うには、メソッドをユーティリティ関数として抽象化することなく、コード全体で使用できる簡単で短い方法を持つことが要件となるでしょう。

例えば、値を追加するために、私は次のようにします。

let o2 = {...o1, age: 31};

これは非常に短く、覚えやすく、ユーティリティ関数も必要ありません。

値を削除するためにこのようなものがあるのでしょうか?ES6大歓迎です。

ありがとうございました。

どのように解決するのですか?

更新してください。

オブジェクトからプロパティを削除するには、トリッキーな デストラクチャーの割り当て :

const doSomething = (obj, prop) => {
  let {[prop]: omit, ...res} = obj
  return res
}

ただし、削除したいプロパティ名が静的なものであれば、簡単なワンライナーで削除することができます。

let {lastname, ...o2} = o


最も簡単な方法は、単純に または、変異させる前にオブジェクトをクローンすることです。

const doSomething = (obj, prop) => {
  let res = Object.assign({}, obj)
  delete res[prop]
  return res
}

あるいは omit 関数から lodash ユーティリティライブラリ :

let o2 = _.omit(o, 'lastname')

の一部として利用可能です。 ロダッシュ パッケージの一部として、あるいはスタンドアロンで lodash.omit(ロダッシュ・オミット パッケージとして使用することもできます。