【JavaScript】オブジェクトを別のオブジェクトで更新する方法(既存のキーのみ上書き)
JavaScriptであるオブジェクトを別のオブジェクトの値で更新したい場合、既存のキーだけを更新し、新しいキーは追加したくないというケースがあります。このような場合には hasOwnProperty() メソッドを活用すると簡単に実現できます。
以下に具体的な実装例を示します。
コード例
var markDetails1 = {
'marks1': 78,
'marks2': 65
};
var markDetails2 = {
'marks2': 89,
'marks3': 90
}
function updateJavaScriptObject(details1, details2) {
const outputObject = {};
Object.keys(details1)
.forEach(obj => outputObject[obj] =
(details2.hasOwnProperty(obj) ? details2[obj] : details1[obj]));
return outputObject;
}
console.log(updateJavaScriptObject(markDetails1, markDetails2));仕組みの解説
この関数では、まず Object.keys(details1) によって元のオブジェクト(details1)が持つキーの一覧を取得します。次に、forEach() で各キーを順番に処理し、hasOwnProperty() を使って details2 に同じキーが存在するかどうかを判定します。
- details2 に同名のキーが存在する場合 → details2 の値で上書き
- 存在しない場合 → 元の details1 の値をそのまま維持
このようにして、既存のキーの値のみを更新し、details2 にしかない「marks3」のような新しいキーは結果に含まれないオブジェクトを生成できます。
プログラムの実行方法
上記のプログラムを実行するには、Node.jsを使って次のコマンドを入力します。
node fileName.js
ここでは、ファイル名を demo140.js として保存しています。
実行結果
実行すると、以下のような出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo140.js
{ marks1: 78, marks2: 89 }出力を見ると、「marks2」だけが details2 の値(89)で更新され、「marks1」は元の値(78)が保持され、新規キーの「marks3」は追加されていないことが確認できます。この手法は、設定オブジェクトやフォームデータなど、既存の構造を保ちながら一部の値だけを差し替えたい場面で非常に役立ちます。
-
JavaScriptのObject.keys().map()とArray.map()の違いを徹底解説
JavaScriptにおいて、Array.map()は配列の各要素に関数を適用し、その結果を新しい配列として返すメソッドです。一方、オブジェクトには直接map()メソッドが用意されていないため、Object.keys().map()という形で、まずObject.keys()を使ってオブジェクトのキーを配列として取得し、そこにmap()を適用するのが一般的なテクニックとなります。 この記事では、両者の使い方の違いを、実際に動作するサンプルコードと実行結果をもとにわかりやすく解説します。 サンプルコード 以下は、Object.keys().map()とArray.map()の動作を比較できるJa
-
JavaScriptで別のオブジェクトを介してオブジェクトにアクセスする方法
JavaScriptでは、あるオブジェクトを定義する際に、別のオブジェクトのプロパティやメソッドを参照することで、その値を取得したり、メソッドの実行結果を利用したりすることができます。この記事では、既存のオブジェクト(obj)を介して、新しいオブジェクト(obj2)からプロパティやメソッドにアクセスする方法を、具体的なコード例とともに解説します。押さえておきたいポイントオブジェクトリテラルの中で obj.lastName のように記述すると、その時点での値が新しいオブジェクトにコピーされます。obj.welcome() のようにメソッド名の後に括弧を付けると、オブジェクト定義時にメソッドが即座