在javascript中找到二维数组的第二个元素的最大值

时间:2015-06-16 12:04:16

标签: javascript arrays

我有一个名为mark的数组,它是二维的,如下所示,显示学生ID和标记:

mark =   [
    [1,100],
    [1,150], 
    [1,80],
    [2,100],
    [1,300],
    [2,250]
]

我将创建一个带有学生ID和最大标记的数组,如下所示:

result: [
    [1,300],
    [2,250]
]

3 个答案:

答案 0 :(得分:4)

最简单的方法之一是在循环数组时使用对象的键/值对来创建临时存储空间。将每个内部数组的第一个元素设置为对象键,如果其值大于已存在的值,则将其添加到值中。然后只需将其导出为数组。

function getResult(arr) {

    // create a temporary object for storage
    var tmp = {};

    // loop through the array elements
    for (var i = 0, l = arr.length; i < l; i++) {

        // set the key/values to the first and second values of
        // of the iterated array element
        var key = arr[i][0];
        var value = arr[i][1];

        // if the key doesn't exist in the object
        // set it to zero
        if (!tmp[key]) { tmp[key] = 0; }

        // if the value is greater than the current value
        // change the value of the object
        if (value > tmp[key]) { tmp[key] = value; }
    }

    // use `map` to iterate over the object keys and
    // create an array of results
    // adding + before `el` coerces the object key string
    // into an integer
    return Object.keys(tmp).map(function (el) {
      return [ +el, tmp[el] ];
    });

}

getResult(mark); // [ [1, 300], [2, 250] ]

DEMO

答案 1 :(得分:2)

覆盖你的&#34;标记&#34;标签

每个元素,

if(mark[i][1] > result[mark[i][0]])
    result[mark[i][0]] = mark[i][1]

你在这样的对象中得到了你的结果

results = {
   1: 300,
   2: 250
}

答案 2 :(得分:1)

您可以将array.sort()函数与custom compare function一起使用,最大值将是结果中的第一个元素:

mark = [[1,100], [1,150], [1,80], [2,100], [1,300], [2,250]];

mark.sort(function(a,b){
    return b[1] - a[1];
});

console.log(mark);

此函数将根据内部数组的第二个项的值对数组进行降序排序。您可以将b[1] - a[1]更改为a[1] - b[1]

,将其更改为升序版

jsfiddle