我正在尝试将每个子数组中最大的数字返回到新数组。我感觉自己真的很近,感觉if(temp[j] < x) {continue;}
不合适。我究竟做错了什么?附言我知道我可能可以只使用math.max()并保存很多代码,但是我想让自己熟悉for循环和数组。
function largestOfFour(arr) {
let newArr = [];
for(let i = 0; i < arr.length; i++) {
let temp = arr[i];
let counter = 0;
for(let j = 0; j < temp.length; j++) {
let x = 0;
if(temp[j] > counter) {
counter = temp[j];
if(counter > x) {
x = counter;
if(temp[j] < x) {
continue;
}
}
newArr.push(temp[j]);
}
}
console.log(arr[i])
}
console.log(newArr);
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 0 :(得分:2)
您期望输出[5, 27, 39, 1001]
吗?
如果是这样,对您的内循环进行的这些较小调整即可完成工作:
function largestOfFour(arr) {
let newArr = [];
for(let i = 0; i < arr.length; i++) {
let temp = arr[i];
let x = 0;
for(let j = 0; j < temp.length; j++) {
if(temp[j] > x) {
x = temp[j];
}
}
newArr.push(x);
//console.log(arr[i])
}
console.log(newArr);
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
您在正确的轨道上,但是您要避免将子数组的最大值推到newArr
上,直到内部循环完成对该子数组的迭代为止。在完成迭代之前,您不知道哪个值是子数组的最高值。
答案 1 :(得分:2)
@Elliot B.的答案可能就是您在寻找哪里出了问题的解释。
在数组上使用Map / Reduce的替代解决方案
function largestOfFour(mainArray) {
return mainArray.map(function (subArray){
return subArray.reduce(function (previousLargestNumber, currentLargestNumber) {
return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;
}, 0);
});
}
//largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
const result = largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]);
console.log(result);
答案 2 :(得分:1)
在代码中,您需要在内部循环中获取最大的数字,然后将其推送:
function largestOfFour(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
let temp = arr[i];
let res = -Infinity; // initialize the res with lowest number
for (let j = 0; j < temp.length; j++) {
if (temp[j] > res) { // if a number is greater than res, assign it to res
res = temp[j];
}
}
newArr.push(res); // push res to the result arr
}
return newArr;
}
const result = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
console.log(result);
如果将最大逻辑重构为外部函数会更容易:
const getArrayMax = ([first, ...arr]) => {
let mx = first;
for (const cur of arr)
if (cur > mx)
mx = cur;
return mx;
}
function largestOfSubarrays(arr) {
const newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr.push(getArrayMax(arr[i])); // push res to the result arr
}
return newArr;
}
const result = largestOfSubarrays([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
console.log(result);
答案 3 :(得分:0)
您还可以简单地按desc
的顺序对数组进行排序并获得第一个元素:
const largestOfFour = arr => arr.map(x => x.sort((a,b) => b-a)[0])
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]))