我一直在嘗試從按字母順序排序的陣列中獲取物件輸出。
例如,如果我有arr = ['anger', 'apple', 'bowl', 'cat']
那么我希望我的物件像obj = { a: ['anger', 'apple'], b: ['bowl'], c:['cat']}
到目前為止,我有這個,但它不能正常作業。
const p4 = function (arr) {
let val = {};
const sortArr = arr.sort();
for (let i = 0; i < sortArr.length; i ) {
for (let j = i; j < sortArr.length; j ) {
if (sortArr[i].charAt(0) == sortArr[j].charAt(0)) {
val.sortArr[j].charAt(0) =sortArr[j] ;
}
}
return val;
}
};
uj5u.com熱心網友回復:
您可以使用reduce:
let arr = ['anger', 'apple', 'bowl', 'cat']
const result = arr.reduce((a, b) => {
let c = b.charAt(0);
if (a[c]) {
a[c].push(b)
} else {
a[c] = [b];
}
return a;
}, {})
console.log(result)
uj5u.com熱心網友回復:
在代碼中:
let val = {};
const sortArr = arr.sort();
sort就地排序并回傳已排序的陣列,因此sortArr和arr都參考相同的(已排序)陣列。你可以這樣做:
arr.sort()
并在下面使用arr而不是sortArr。
for (let i = 0; i < sortArr.length; i ) {
for (let j = i; j < sortArr.length; j ) {
不需要對陣列進行兩次處理。您需要做的就是:
- 迭代陣列中的每個值
- 獲取值的第一個字母
- 如果val物件沒有具有該名稱的屬性,則創建它并為該值分配一個陣列
- 將字串推入val[char]陣列
例如
function arrToObj(arr) {
arr.sort();
let result = {};
for (let i=0, c; i<arr.length; i ) {
c = arr[i].substr(0,1);
if (!result[c]) {
result[c] = [];
}
result[c].push(arr[i]);
}
return result;
}
let arr = ['anger', 'apple', 'bowl', 'cat']
console.log(arrToObj(arr));
你也可以用reduce做同樣的事情:
let arr = ['anger', 'apple', 'bowl', 'cat']
let obj = arr.sort().reduce((acc, v) => {
let c = v.substr(0,1);
if (!acc[c]) acc[c] = [];
acc[c].push(v);
return acc;
}, {});
console.log(obj);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396709.html
標籤:javascript 数组 排序 目的
