【超便利】JavaScript でオブジェクトのキーと値を入れ替える5つの方法
JavaScript でオブジェクトのキーと値を入れ替える方法
方法1:Object.entries と Object.fromEntries を使用する
この方法は、ES2019 で導入された新しいメソッドである Object.fromEntries
を使用します。
const obj = {
name: 'John Doe',
age: 30
};
const swappedObj = Object.fromEntries(
Object.entries(obj).map(([key, value]) => [value, key])
);
console.log(swappedObj); // { John Doe: 'name', 30: 'age' }
このコードでは、まず Object.entries
メソッドを使用して、オブジェクトのキーと値のペアを配列に変換します。次に、map
関数を使用して、各ペアを値とキーの新しいペアに置き換えます。最後に、Object.fromEntries
メソッドを使用して、新しいキーと値のペアから新しいオブジェクトを作成します。
方法2:一時的なオブジェクトを使用して値をコピーする
この方法は、古い JavaScript バージョンでも使用できる方法です。
const obj = {
name: 'John Doe',
age: 30
};
const swappedObj = {};
for (const [key, value] of Object.entries(obj)) {
swappedObj[value] = key;
}
console.log(swappedObj); // { John Doe: 'name', 30: 'age' }
このコードでは、まず空のオブジェクトを作成します。次に、for...in
ループを使用して、元のオブジェクトの各キーと値をイテレートします。最後に、swappedObj
オブジェクトに、値をキーとして、キーを値として追加します。
一般的に、Object.entries
と Object.fromEntries
を使用する方が、より簡潔で読みやすいコードになります。ただし、古い JavaScript バージョンを使用している場合は、一時的なオブジェクトを使用する方法を使用する必要があります。
その他の注意点
- オブジェクトのキーが文字列でない場合、これらの方法を使用する前にキーを文字列に変換する必要がある場合があります。
- オブジェクトのキーに重複がある場合、最後のキーのみが新しいオブジェクトに保存されます。
上記以外にも、オブジェクトのキーと値を入れ替える方法はいくつかあります。具体的な方法は、状況に応じて選択してください。
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = Object.fromEntries(
Object.entries(obj).map(([key, value]) => [value, key])
);
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = {};
for (const [key, value] of Object.entries(obj)) {
swappedObj[value] = key;
}
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
例 3: Object.assign を使用する
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = {};
Object.assign(swappedObj, ...Object.entries(obj).map(([value, key]) => ({ [value]: key })));
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
例 4: lodash ライブラリを使用する
lodash
は、JavaScript でよく使用されるユーティリティライブラリです。このライブラリには、オブジェクトのキーと値を入れ替えるためのヘルパー関数 invert
が含まれています。
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = _.invert(obj);
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
説明
上記の例では、さまざまな方法でオブジェクトのキーと値を入れ替えています。
- 例 1 と 例 2 は、上記の説明で説明した方法と同じです。
- 例 3 は、
Object.assign
メソッドを使用して、新しいオブジェクトに元のオブジェクトのキーと値をコピーします。次に、map
関数を使用して、各キーと値のペアを値とキーの新しいペアに置き換えます。 - 例 4 は、
lodash
ライブラリのinvert
ヘルパー関数を使用して、オブジェクトのキーと値を入れ替えます。
- Object.entriesとObject.fromEntries` は、ES2019 以降を使用している場合、簡潔で読みやすいコードを作成するのに適しています。
- 一時的なオブジェクトを使用する方法 は、古い JavaScript バージョンでも使用できますが、コードが冗長になる可能性があります。
- Object.assign は、新しいオブジェクトを作成する必要がない場合に適しています。
- lodash は、JavaScript でよく使用されるライブラリであり、
invert
ヘルパー関数など、オブジェクトを操作するための便利な機能を提供します。
JavaScript でオブジェクトのキーと値を入れ替えるその他の方法
forEach を使用する
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = {};
Object.keys(obj).forEach(key => {
swappedObj[obj[key]] = key;
});
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
reduce を使用する
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = Object.entries(obj).reduce((acc, [key, value]) => {
acc[value] = key;
return acc;
}, {});
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
Symbol を使用する
const obj = {
name: 'John Doe',
age: 30,
city: 'New York'
};
const swappedObj = {};
const temp = Symbol();
Object.entries(obj).forEach(([key, value]) => {
swappedObj[value] = [key, temp];
obj[temp] = key;
temp = Symbol();
});
for (const [key, value] of Object.entries(swappedObj)) {
swappedObj[key] = value[0];
}
console.log(swappedObj);
// { John Doe: 'name', 30: 'age', 'New York': 'city' }
上記の方法はいずれも、オブジェクトのキーと値を入れ替えるための代替手段として使用できます。
- forEach メソッドは、オブジェクトのキーをループして、各キーの値を新しいオブジェクトのキーとして追加します。
- reduce メソッドは、オブジェクトのキーと値のペアを新しいオブジェクトに減らすために使用されます。
- Symbol を使用する方法は、一時的なオブジェクトを使用せずにキーと値を入れ替えるためのより複雑な方法です。
- コードのパフォーマンス を重視する場合は、forEach または reduce を使用する方が良いかもしれません。
- 複雑なキー構造 を扱う場合は、Symbol を使用する方が良いかもしれません。
上記以外にも、さまざまな方法でオブジェクトのキーと値を入れ替えることができます。状況に応じて適切な方法を選択してください。
javascript node.js key-value