簡體   English   中英

如何從數組中選擇最高的 3 個字符串值

[英]How can I pick highest 3 string values from array

我有一個具有sequence number數組。 我想從基於數組而不是序列號中選取前 3 個sequence numbers ,例如"sequesnce": "9.80.709.5這是我的數組

array1=[
{
    "orgId": 101,
    "dId": 494,
    "name": "Test1",
    "sequesnce": "6.408.06.0 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR"
},
{
    "orgId": 102,
    "dId": 442,
    "name": "Test2",
    "sequesnce": "9.80.709.5 Sequesnce Date : Mon 06/04/2019 (Sections: P4.00344) Italy CR",
},
{
    "orgId": 103,
    "sequesnce": "9.138.309.0 Sequesnce Date : Mon 06/03/2019 (Sections: P4.45600) Spain HR",
    "dId": 494,
    "name": "Test3",
},
{
    "orgId": 103,
    "sequesnce": "8.208.409.0 Sequesnce Date : Mon 10/03/2019 (Sections: P4.568787) Spain HR",
    "dId": 494,
    "name": "Test3",
},
{
    "orgId": 103,
    "sequesnce": "9.408.90.3 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR",
    "dId": 494,
    "name": "Test3",
},

我正在尋找輸出

topThree=
{
"sequesnce": "9.80.709.5 Sequesnce Date : Mon 06/04/2019 (Sections: P4.00344) Italy CR",
},
{
"sequesnce": "9.408.90.3 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR",
},
{
"sequesnce": "9.138.309.0 Sequesnce Date : Mon 06/03/2019 (Sections: P4.45600) Spain HR",
},

我試過這個

function arrayMax(arr) {
return arr.reduce(function (p, v) {
  return ( p > v ? p : v );
});
}]

var maximo = arrayMax(obj); //return the high

這還給我

{
    "orgId": 102,
    "dId": 442,
    "name": "Test2",
    "sequesnce": "9.80.709.5 Sequesnce Date : Mon 06/04/2019 (Sections: P4.00344) Italy CR",
},

此代碼返回單個數組而不是三個數組,並且不確定在所有情況下此邏輯都會起作用。

您可以使用String#localeCompare進行排序,並選擇按帶點值的列排序。

最后用Array#slice取前三項。

 const array = [{ orgId: 101, dId: 494, name: "Test1", sequesnce: "6.408.06.0 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR" }, { orgId: 102, dId: 442, name: "Test2", sequesnce: "9.80.709.5 Sequesnce Date : Mon 06/04/2019 (Sections: P4.00344) Italy CR" }, { orgId: 103, sequesnce: "9.138.309.0 Sequesnce Date : Mon 06/03/2019 (Sections: P4.45600) Spain HR", dId: 494, name: "Test3" }, { orgId: 103, sequesnce: "8.208.409.0 Sequesnce Date : Mon 10/03/2019 (Sections: P4.568787) Spain HR", dId: 494, name: "Test3" }, { orgId: 103, sequesnce: "9.408.90.3 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR", dId: 494, name: "Test3" }], top3 = array .sort((a, b) => b.sequesnce.localeCompare(a.sequesnce, undefined, { numeric: true, sensitivity: 'base' })) .slice(0, 3) console.log(top3);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

如果您的序列較短且前導值較高,則需要在排序之前擴展元組 - 這不適用於 localeCompare

 const maxLen = 4; const expandTuple = tpl => { tpl = tpl.split('.'); while (tpl.length < maxLen) tpl.unshift("000"); return tpl.map(x => x.padStart(3, "0")).join('.'); }; const array1 = [{ "orgId": 101, "dId": 494, "name": "Test1", "sequence": "6.408.06.0 Sequence Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR" },{"orgId": 102,"dId": 442,"name": "Test2", "sequence": "9.80.709.5 Sequence Date : Mon 06/04/2019 (Sections: P4.00344) Italy CR",},{"orgId": 103, "sequence": "99.1.1 NOTE THIS IS SHORTER Sequence Date : Mon 06/03/2019 (Sections: P4.45600) Spain HR","dId": 494,"name": "Test3",},{"orgId": 103, "sequence": "8.208.409.0 Sequence Date : Mon 10/03/2019 (Sections: P4.568787) Spain HR","dId": 494,"name": "Test3",},{"orgId": 103, "sequence": "9.408.90.3 Sequence Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR","dId": 494, "name": "Test3", } ] const three = array1.sort((a,b) => { const aTub = a.sequence.split(" ")[0]; const bTub = b.sequence.split(" ")[0]; if (expandTuple(aTub)<expandTuple(bTub)) return 1 if (expandTuple(aTub)>expandTuple(bTub)) return -1 return 0; }).slice(0,3) console.log(three) // ---- compare other solution which fails on the shorter sequence console.log(array1 .sort((a, b) => b.sequence.localeCompare(a.sequence, undefined, { numeric: true, sensitivity: 'base' })) .slice(0, 3) )

  • 首先,使用Array.map ,您只能生成sequesne項對象的數組。
  • 使用Array.sort ,您可以按降序對數組進行排序。
  • 使用Array.splice ,您可以從排序數組中提取前 3 項。

 const array1 = [{ "orgId": 101, "dId": 494, "name": "Test1", "sequesnce": "6.408.06.0 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR" }, { "orgId": 102, "dId": 442, "name": "Test2", "sequesnce": "9.80.709.5 Sequesnce Date : Mon 06/04/2019 (Sections: P4.00344) Italy CR", }, { "orgId": 103, "sequesnce": "9.138.309.0 Sequesnce Date : Mon 06/03/2019 (Sections: P4.45600) Spain HR", "dId": 494, "name": "Test3", }, { "orgId": 103, "sequesnce": "8.208.409.0 Sequesnce Date : Mon 10/03/2019 (Sections: P4.568787) Spain HR", "dId": 494, "name": "Test3", }, { "orgId": 103, "sequesnce": "9.408.90.3 Sequesnce Date : Mon 08/06/2019 (Sections: P4.00344) Italy CR", "dId": 494, "name": "Test3", } ]; const sortedArr = array1.map(({ sequesnce }) => ({ sequesnce })).sort((a, b) => (b.sequesnce.localeCompare(a.sequesnce, undefined, { numeric: true, sensitivity: 'base'}))); const topCount = 3; console.log(sortedArr.splice(0, topCount));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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