我有以下物件:
const obj = {
A: [{
capacity: 100
}, {
capacity: 100
}, {
capacity: 100
}],
B: [{
capacity: 500
}, {
capacity: 500
}, {
capacity: 500
}],
C: [{
capacity: 300
}, {
capacity: 300
}, {
capacity: 300
}]
}
我需要轉換為具有相同形狀但鍵按容量排序的物件。需要注意的是,陣列(A、B、C)中每個物件的容量在同一個物件內總是相同的。所以我們可以以第一次出現為例
預期結果:
const obj = {
A: [{
capacity: 100
}, {
capacity: 100
}, {
capacity: 100
}],
C: [{
capacity: 300
}, {
capacity: 300
}, {
capacity: 300
}],
B: [{
capacity: 500
}, {
capacity: 500
}, {
capacity: 500
}]
}
我的方法都沒有奏效。一個例子:
const sortByPosition = obj => {
const order = [], res = {};
Object.keys(obj).forEach(key => {
return order[obj[key][1]['capacity'] - 1] = key;
});
order.forEach(key => {
res[key] = obj[key];
});
return res;
}
console.log(sortByPosition(obj));
這是一個小提琴
uj5u.com熱心網友回復:
有幾種方法可以解決您的問題,這是最容易理解的一種:
const sortByPosition = obj => {
let sortable = [];
let objSorted = {};
for (let key in obj) {
sortable.push([key, obj[key]]);
}
sortable.sort(function(a, b) {
return a[1][0].capacity - b[1][0].capacity;
});
sortable.forEach(function(item){
objSorted[item[0]] = item[1]
})
return objSorted;
}
console.log(sortByPosition(obj));
console.log(Object.keys(sortByPosition(obj)));
console.log(Object.keys(obj));
我在我的代碼中列印了 3 個日志。在第一個日志的結果中,似乎沒有變化。但是從第 2 條和第 3 條日志中,我們可以看到結果是正確的。這些日志如下:
["A", "C", "B"]
["A", "B", "C"]
uj5u.com熱心網友回復:
const obj = {
A: [ { capacity: 100 }, { capacity: 100 }, { capacity: 100 } ],
B: [ { capacity: 500 }, { capacity: 500 }, { capacity: 500 } ],
C: [ { capacity: 300 }, { capacity: 300 }, { capacity: 300 } ]
};
console.log(Object.fromEntries(Object.entries(obj)
.sort(([i,a],[j,b])=>a[0].capacity-b[0].capacity)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/526437.html
標籤:javascript数组目的函数式编程javascript 对象