一、JS二维数组排序sort
在JS中,可以使用sort方法来对一维数组进行排序,而对于二维数组,我们只需要稍作修改即可。sort方法需要传入一个函数作为参数,函数的返回值决定了数组的排序顺序。
// 二维数组按第一列排序 var arr = [ [3, 2, 1], [6, 5, 4], [9, 8, 7] ]; arr.sort(function(a, b) { return a[0] - b[0]; }); console.log(arr); // 输出:[[3, 2, 1], [6, 5, 4], [9, 8, 7]]
在上面的代码中,我们按照二维数组的第一列进行升序排序。其中,参数a和b分别代表当前比较的两个数组。
二、JS二维数组转置
在很多应用场景中,需要将二维数组的行和列进行互换,即进行转置操作。我们可以通过遍历二维数组,创建一个新的数组来实现转置。
var arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var res = []; for (var i = 0; i < arr[0].length; i++) { res[i] = []; for (var j = 0; j < arr.length; j++) { res[i][j] = arr[j][i]; } } console.log(res); // 输出:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
三、JS二维数组排序方法sort
除了使用sort方法外,我们还可以使用数组排序方法来对二维数组进行排序。这里我们使用冒泡排序作为例子。
function sort(arr, col) { for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - 1 - i; j++){ if (arr[j][col] > arr[j + 1][col]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } var arr = [ [3, 2, 1], [6, 5, 4], [9, 8, 7] ]; console.log(sort(arr, 0)); // 输出:[[3, 2, 1], [6, 5, 4], [9, 8, 7]] console.log(sort(arr, 1)); // 输出:[[9, 8, 7], [6, 5, 4], [3, 2, 1]] console.log(sort(arr, 2)); // 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
在上面的代码中,sort函数接受两个参数,分别为要排序的数组和排序的列号。通过遍历数组,进行冒泡排序,最后返回排好序的数组。
四、JS二维数组排序 第一行第一列
有时候,我们需要对二维数组的第一行和第一列进行排序,可以通过以下代码实现。
var arr = [ [3, 2, 1], [6, 5, 4], [9, 8, 7] ]; arr.sort(function(a, b) { if (a[0] !== b[0]) { return a[0] - b[0]; } else { return a[1] - b[1]; } }); for (var i = 0; i < arr.length; i++) { arr[i].sort(function(a, b) { if (i === 0) { return a - b; } else { return 0; } }); } console.log(arr); // 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
在上面的代码中,我们先按照第一列升序排序,如果第一列相同,则按照第二列升序排序。然后再分别对第一行和第一列进行排序,最终得到排序好的二维数组。
五、二维数组排序
对于一般的二维数组排序,我们可以将二维数组转换为一维数组,使用sort方法进行排序。
var arr = [ [3, 2, 1], [6, 5, 4], [9, 8, 7] ]; var temp = []; for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr[i].length; j++) { temp.push(arr[i][j]); } } temp.sort(function(a, b) { return a - b; }); var res = []; for (var i = 0; i < arr.length; i++) { res[i] = []; for (var j = 0; j < arr[i].length; j++) { res[i][j] = temp.shift(); } } console.log(res); // 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
在上面的代码中,我们将二维数组转换为一维数组,并进行排序。然后再将一维数组按照原来的行列方式还原成二维数组。
六、JS遍历二维数组
遍历二维数组的方法和一维数组类似,只需要使用嵌套的for循环即可。
var arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr[i].length; j++) { console.log(arr[i][j]); } }
在上面的代码中,我们使用两个for循环遍历二维数组,并输出数组元素。
七、JS定义二维数组
在JS中,二维数组也是一种数组类型,同样需要使用Array对象进行创建。我们以一个3行4列的二维数组为例。
var arr = new Array(3); for (var i = 0; i < 3; i++) { arr[i] = new Array(4); } arr[0][0] = 1; arr[0][1] = 2; arr[0][2] = 3; arr[0][3] = 4; arr[1][0] = 5; arr[1][1] = 6; arr[1][2] = 7; arr[1][3] = 8; arr[2][0] = 9; arr[2][1] = 10; arr[2][2] = 11; arr[2][3] = 12; console.log(arr); // 输出:[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
在上面的代码中,我们先定义了一个长度为3的一维数组,然后用for循环分别对每个一维数组进行定义,得到二维数组。
八、JS创建二维数组
除了使用Array对象,我们还可以使用JS的双重for循环来创建二维数组。
var arr = []; for (var i = 0; i < 3; i++) { arr[i] = []; for (var j = 0; j < 4; j++) { arr[i][j] = i * 4 + j + 1; } } console.log(arr); // 输出:[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
在上面的代码中,我们使用两个for循环分别定义行和列,并给每个元素赋予对应的数值,从而得到二维数组。