我有一个名为mark的数组,它是二维的,如下所示,显示学生ID和标记:
mark = [
[1,100],
[1,150],
[1,80],
[2,100],
[1,300],
[2,250]
]
我将创建一个带有学生ID和最大标记的数组,如下所示:
result: [
[1,300],
[2,250]
]
答案 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] ]
答案 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]