簡體   English   中英

根據關鍵字的對象返回對象數組

[英]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);

這將首先使用map()變換a對象的條目與對象的數組keyword屬性,則sort()此基礎上的長度的總和。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM