JS数组Array的相关方法

[JS 编程技巧] 查找二维数组中的最大值/最小值方法.

查找二维数组中的最大值,最小值方法

例如:有如下二维数组,取出二维数组中每一项的最大值/最小值,返回一个新的数组.

1
2
3
4
5
6
7
// 查找二维数组中的最大值.
const arr = [
[4, 5, 1, 3],
[11, 23, 45, 64],
[111, 333, 445, 678],
[1000, 1112, 2312, 2345],
];

方法 1: (直接循环)-简单直接

1
2
3
4
5
6
7
8
9
function largestOfFour(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
// Math.max(...arr[i])
res.push(Math.max(...arr[i]));
}
return res;
}

方法 2: 数组 map 方法

1
2
3
4
5
6
function largestOfFour(arr) {
return arr.map(function (item, index, arr) {
// console.log(item,index,arr);
return Math.max(...item);
});
}

简写方法:

1
2
3
function largestOfFour(arr) {
return arr.map((item) => Math.max(...item));
}

方法 3: 冒泡排序,先排序,在取值 (sort,pop 数组方法)

1
2
3
function largestOfFour(arr) {
return arr.map((item) => item.sort((a, b) => a - b).pop());
}

方法 4: reduce 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function largestOfFour(arr) {
return arr.map((item) => {
return item.reduce((prev, cur) => {
return cur > prev ? cur : prev;
});
});
}

// 进一步优化该方法:

function largestOfFour(arr) {
return arr.map((item) =>
item.reduce((prev, cur) => (cur > prev ? cur : prev))
);
}

方法 5: call 和 apply 改变函数的传参方式

1
2
3
4
function largestOfFour(arr) {
// return arr.map(Math.max); // NaN (Number转)
return arr.map(Function.prototype.apply.bind(Math.max, null));
}