[英]get highest element in a two dimensional array
我有這個數組:
const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]]
並想變成這樣:(只有最高的一個)
[ [ 'Pig', 10 ], [ 'Cow', 12 ], [ 'Chicken', 12 ] ]
但是用我的代碼我不能得到最后一個,我找不到為什么
const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]]
function getHighest() {
var onlyHighest = [];
myArray.sort(
function(a,b) {
if (a[0] == b[0])
return a[1] < b[1] ? -1 : 1;
return a[0] < b[0] ? 1 : -1;
}
);
myArray.forEach((a, i) => {
var i = i+1;
if (i < myArray.length) {
if (a[0] != myArray[i][0]){
onlyHighest.push([a[0], a[1]]);
}
}
});
return console.log(onlyHighest)
// [ [ 'Pig', 10 ], [ 'Cow', 12 ] ]
}
使用一個對象來保存每只動物的當前最高值。 循環遍歷數組,當它高於對象中的值時替換該值。
const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]] function getHighest(array) { let obj = {}; array.forEach(([key, value]) => { if (key in obj) { if (value > obj[key]) { obj[key] = value; } } else { obj[key] = value; } }); return Object.entries(obj); } console.log(getHighest(myArray));
您的
myArray.forEach((a, i) => {
var i = i+1;
if (i < myArray.length) {
導致問題並且非常混亂。 如果數組的最后一個排序塊僅包含 2 個元素,則不會滿足該條件,因此該塊中的任何內容都不會被推送。
如果原始元素是數組中的最后一個元素,則快速解決方法是無條件推送原始元素。
myArray.forEach((a, i) => {
if (i === myArray.length - 1) {
更好的重構是將輸入分組到一個對象中,該對象為每個屬性保留最大值,不涉及排序。
const myArray = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow" , 12], ["Cow", 11], ["Chicken", 12]] const grouped = {}; for (const [prop, num] of myArray) { grouped[prop] = Math.max(num, grouped[prop] ?? -Infinity); } const onlyHighest = Object.entries(grouped); console.log(onlyHighest);
function funk() {
let a = [["Cow", 3], ["Pig", 5], ["Pig", 10], ["Pig", 4], ["Chicken", 1], ["Cow", 1], ["Cow", 12], ["Cow", 11], ["Chicken", 12]];
let r = a.sort((a, b) => {
return b[1] - a[1]
})[0];
Logger.log(r);
}
Execution log
12:37:11 PM Notice Execution started
12:37:11 PM Info [Cow, 12.0]
12:37:12 PM Notice Execution completed
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.