我正在尝试使用sort()方法将每个数组中的最大数字返回到一个数组。我认为除了排序之外我正确地完成了整个代码:
function largestOfFour(arr) {
let result=[];
for(let i=0; i < arr.length; i++) {
for(let j=0; j < arr[i].length; j++) {
let segregatedArr = arr[0][j].sort((a,b)=>b-a);
}
result = segregatedArr[0][i][0];
}
return result;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
我收到了一个错误:
TypeError: arr[0][j].sort is not a function
我正在尝试使用切片方法或映射到数组:
result = $.map(arr, function(value, index) { return [value]; });
result.sort().reverse();
但两种情况下的错误仍然相同。
答案 0 :(得分:1)
function maxArr(arr2D) {
let result = [];
for(let i = 0; i < arr2D.length; i++) {
result[i] = arr2D[i].sort((a, b) => b - a)[0];
}
return result;
}
答案 1 :(得分:0)
您可以使用Math.max.apply获取最大数字:
function largestOfFour(array){
var result = [];
for(var i=0; i<array.length;++i){
result.push(Math.max.apply(Math, array[i]));
}
return result;
}
答案 2 :(得分:0)
所以,我认为对于这样的帖子,如果你提供一个输入样本和所需的输出会很有帮助。
您是否尝试将数组作为输入?然后输出一个数组,其中每个元素都有原始数组中最大的元素?我创建的示例输入如下:
var a1 = [1, 2, 3];
var a2 = [5, 19, 7];
var a3 = [199, 198, 104];
var arrs = [a1, a2, a3];
// run the function and view its output:
console.log(largestOfFour(arrs));
// outputs [ 3, 19, 199 ]
如果这就是你想要的,那么我认为你有太多的循环(一个带有不需要的内循环的外循环),所以这行代码:
let segregatedArr = arr[0][j].sort((a,b)=>b-a);
正在访问数字而不是数字数组。我按如下方式修改了函数:
function largestOfFour(arr) {
let result=[];
for(let i=0;i<arr.length;i++){
let segregatedArr=arr[i].sort((a,b)=> b-a);
result.push(segregatedArr[0])
}
return result;
}
因此,我删除了内部循环(使用'j'索引),然后主循环只对输入数组的第i个数组进行排序。这就是你想要的吗?
答案 3 :(得分:0)
var array = [
[1, 2, 3, 4],
[10, 5, 3, 4],
[11, 20, 13, 14],
[1, 2, 3, 40]
];
function maxVal(arr) {
var max = arr[0];
arr.forEach(function(item) {
max = Math.max(item, max);
});
return max;
};
function largestOfFour(arr) {
return arr.map(function(innerArray) {
return maxVal(innerArray);
});
}
console.log(largestOfFour(array));
或者如果你真的想要使用sort: - )
function maxVal(arr) {
arr.sort(function(a, b) {
if (a === b) {
return 0;
}
return a > b ? -1 : 1;
});
return arr[0];
};
function largestOfFour(arr) {
return arr.map(function(innerArray) {
return maxVal(innerArray);
});
}
console.log(largestOfFour(array));