我试图找到一组数组中的最大数字并将它们返回到新数组中。但我不知道为什么我的代码不起作用。你能解释我的错误吗?
function largestOfFour(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
arr[i].sort(function(a, b) {
return b - a;
});
}
}
}
largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]);
答案 0 :(得分:0)
如果您希望从所有阵列中获取最大的 n 值,您可以展平列表,排序和消息。
var arrayOfArrys = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var flattened = [];
for (var _i = 0, arrayOfArrys_1 = arrayOfArrys; _i < arrayOfArrys_1.length; _i++) {
var arr = arrayOfArrys_1[_i];
flattened = flattened.concat(arr);
}
var sorted = flattened.sort(function (a, b) {
return b - a;
});
alert(JSON.stringify(sorted));
答案 1 :(得分:0)
如果你正在寻找具有最大SUM的数组(因为你说你想要最大的&#34;数字&#34;不是&#34;数字&#34;),你可以做类似的事情:
function largestOfFour(arr) {
var sums = [];
for(var i = 0; i < arr.length; i++){
var arraySum = 0;
for(var j = 0; j < arr[i].length; j++){
arraySum+=arr[i][j];
}
sums.push({array: arr[i], sum: arraySum});
}
return sums.sort(function(a,b){return b.sum - a.sum})[0].array;
}
答案 2 :(得分:0)
获得基本功能的第一轮重构涉及使用map
来提取最大值:
map
第二次传递涉及更积极地使用max
以及使用sort
代替function largestOfFour(arr) {
return arr.map(function(a) {
return Math.max.apply(null, a);
});
}
:
sort(function(a,b) { ... })
这样可以解决进行数字排序所需的丑陋data.frames
垃圾。
答案 3 :(得分:0)
您的代码存在很多问题。
n
的数组,你要对该数组n
进行排序。这不必要地效率低下。解决这些问题:
function largestOfFour(arr) {
var result = [], max, jMax;
for (var i = 0; i < arr.length; i++) {
max = arr[i][0];
for (var j = 1; j < arr[i].length; j++) {
if (max < arr[i][j])
max = arr[i][j];
}
result.push(max);
}
return result;
}
console.log(
largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
])
);
function largestOfFour(arr) {
return arr.map(function(x) {
return x.reduce(function(a, c) {
return c < a ? a : c;
});
});
}
console.log(largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]));