JavaScriptでオブジェクトの配列を文字列プロパティ値に基づいてソートする方法
JavaScriptでオブジェクトの配列を文字列プロパティ値に基づいてソートするには、いくつかの方法があります。
- sort() メソッド
- Array.prototype.sort() メソッド
- 比較関数
方法
この方法は、オブジェクトの配列を直接ソートする最も簡単な方法です。
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
objects.sort((a, b) => a.name.localeCompare(b.name));
console.log(objects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
上記の例では、localeCompare()
メソッドを使用して、オブジェクトの名前をロケールに基づいて比較しています。
この方法は、sort()
メソッドと同様に機能しますが、より多くのオプションを提供します。
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
objects.sort(function(a, b) {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
});
console.log(objects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
上記の例では、比較関数を使用して、オブジェクトの名前を比較しています。
比較関数は、オブジェクトをどのように比較するかを定義する関数です。
function compareNames(a, b) {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
}
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
objects.sort(compareNames);
console.log(objects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
上記の例では、compareNames()
関数を比較関数として使用しています。
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
objects.sort((a, b) => a.name.localeCompare(b.name));
console.log(objects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
objects.sort(function(a, b) {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
});
console.log(objects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
例 3: 比較関数
function compareNames(a, b) {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
}
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
objects.sort(compareNames);
console.log(objects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
JavaScriptでオブジェクトの配列を文字列プロパティ値に基づいてソートする他の方法
Lodash.js などのライブラリには、配列をソートするための便利なヘルパー関数が含まれています。
const _ = require('lodash');
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
const sortedObjects = _.sortBy(objects, 'name');
console.log(sortedObjects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
上記の例では、_.sortBy()
関数を使用して、オブジェクトの名前に基づいて配列をソートしています。
.reduce()
メソッドを使用して、オブジェクトの配列をソートすることもできます。
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
const sortedObjects = objects.reduce((acc, object) => {
if (object.name < acc[acc.length - 1].name) {
acc.unshift(object);
} else {
acc.push(object);
}
return acc;
}, []);
console.log(sortedObjects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
const objects = [
{ name: "John", age: 30 },
{ name: "Mary", age: 25 },
{ name: "Alice", age: 20 },
];
const sortedObjects = objects
.filter((object) => object.name < 'John')
.concat(objects.filter((object) => object.name === 'John'));
console.log(sortedObjects); // [{name: "Alice", age: 20}, {name: "John", age: 30}, {name: "Mary", age: 25}]
javascript arrays sorting