[英]Pick highest number in a JavaScript Array I got from a Google Sheet
[英]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.