[英]return array of objects based on object of keywords
我有一個包含每個關鍵字數據的對象:
const a = {
word1: { mains: [ 5 ], secondaries: [1, 22, 50] },
word2: { mains: [ 5, 66 ], secondaries: [1] },
word3: { mains: [ 5 ], secondaries: [1] },
}
我希望這個包含上述對象數據的對象數組根據每個關鍵字的mains
數組和secondaries
數組的length
進行排序,我的意思是:
mains.length + secondaries.length
這是所需的輸出:
[
{ keyword: 'word3', mains: [ 5 ], secondaries: [1] }, // length of mains and secondaries = 2
{ keyword: 'word2', mains: [ 5, 66 ], secondaries: [1] }, // length of mains and secondaries = 3
{ keyword: 'word1', mains: [ 5 ], secondaries: [1, 22, 50] }, // length of mains and secondaries = 4
]
實現這種功能的正確解決方案是什么?
這是一個“單線”解決方案:
const a = { word1: { mains: [5], secondaries: [1, 22, 50] }, word2: { mains: [5, 66], secondaries: [1] }, word3: { mains: [5], secondaries: [1] } } const result = Object.entries(a).map( ([keyword, item]) => ({keyword, ...item}) ).sort( (a, b) => (a.mains.length + a.secondaries.length) - (b.mains.length + b.secondaries.length) ) console.log(result);
const a = {
word1: { mains: [ 5 ], secondaries: [1, 22, 50] },
word2: { mains: [ 5, 66 ], secondaries: [1] },
word3: { mains: [ 5 ], secondaries: [1] },
};
let array = [];
for (let prop in a) {
let newProp = {keyword: prop};
array.push(Object.assign(newProp, a[prop]));
}
array.sort((a, b) => {
return (a.mains.length + a.secondaries.length) -
(b.mains.length + b.secondaries.length);
});
簡單地
const objA = { word1: { mains: [ 5] , secondaries: [ 1, 22, 50] } , word2: { mains: [ 5, 66] , secondaries: [ 1] } , word3: { mains: [ 5] , secondaries: [ 1] } } const sumLen = ([_, {mains,secondaries}]) => mains.length + secondaries.length ; const result = Object.entries(objA) .sort((a,b)=>sumLen(a)-sumLen(b)) .map(([keyword,obj])=>({keyword, ...obj})) console.log( result )
.as-console-wrapper { max-height: 100% !important; top: 0 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.