我想根據陣列的第一個字母(按字母順序)對陣列進行分組,因此輸出如下所示:
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];
[
{ 'A' : [ 'Apple', 'Ape' ] },
{ 'B': [ 'Banana', 'Bag' ] },
{ 'C': [ 'Crab', 'Cupboard' ] },
{ 'D': [ 'Dog', 'Dare' ] }
]
我將如何使用 groupBy Lodash 方法來做到這一點?如果需要,它還可以擴展到字母表中的所有字母嗎?你也會使用 forEach Lodash 方法嗎?
提前致謝!
uj5u.com熱心網友回復:
使用 lodash,您可以使用多種方法來獲取它。
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];
const grouped = _.map(_.entries(_.groupBy(words, _.first)), ([k,v]) => ({[k]:v}))
console.log(grouped);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
使用普通的舊 JavaScript:
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];
const grouped = Object.values(words.reduce((acc,word) => (acc[word[0]] ??= {[word[0]]: []}, acc[word[0]][word[0]].push(word), acc), {}))
console.log(grouped);
uj5u.com熱心網友回復:
你不需要 lodash:
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare'];
const uniqueLetters = [...new Set(words.map(w => w[0]))];
const grouped = uniqueLetters.map(l => {
const el = {};
el[l] = words.filter(w => w[0] == l);
return el;
})
console.log(grouped);
或者,在線性大 O 時間:
const words = [
"Apple",
"Ape",
"Banana",
"Bag",
"Crab",
"Cupboard",
"Dog",
"Dare"
];
const uniqueLetters = [...new Set(words.map(w => w[0]))];
const el = {};
uniqueLetters.forEach(l => el[l] = []);
words.forEach(w => el[w[0]].push(w));
const arr = Object.keys(el).map((k) => {
const a = {};
a[k] = el[k];
return a;
});
console.log(arr);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/364768.html
標籤:javascript 数组 目的 洛达什
