我正在试图找出如何使用下面的代码将largestNumber变量推送到largestNumbers变量,以便maximumOfFour的每个子数组中的最大数字将作为maximumNumbers数组返回。
我在精神上看到它,并认为我正在编写代码。这是我的思考过程:
1)maximumNumbers被设置为空数组。
2)创建一个for循环,在循环期间拉出每个子数组并将其存储为PulledSubArray。
3)我需要遍历子阵列(拉出 SubArray)带有for循环。
4)设置maximumNumber变量以存储子数组中的最大数字,并设置if语句以确定哪个数字最大,然后将该数字推送到largestNumbers数组。
5)打破内部for循环,然后重复第二个子数组的步骤。
如果没有给出整个挑战的答案,你能否告诉我为实现最终结果我缺少哪些语法或元素
function largestOfFour(arr) {
var largestNumbers = [];
for (var i = 0; i > arr.length; i++){
var pulledSubArray = arr[i];
for (var n = 0; n > pulledSubArray.length; n++){
var biggestNumber = 0;
if (pulledSubArray[n] > biggestNumber){
biggestNumber = pulledSubArray[n];
} else if (pulledSubArray[n] < biggestNumber){
largestNumbers.push(biggestNumber);
break;
}
}
}
return largestNumbers;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 0 :(得分:0)
如果你想获得每个子数组中最大的数字:
var data = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
function largestOfFour(data) {
return data.map(function(d) {
return Math.max.apply(null, d)
})
}
console.log(largestOfFour(data))
甚至更短(es6):
let data = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
const largestOfFour = data => data.map(d => Math.max.apply(null, d))
console.log(largestOfFour(data))
答案 1 :(得分:0)
for (var i = 0; i > arr.length; i++){
^
Wrong condition
你的循环结构是错误的。纠正他们。函数的简单版本看起来像(ECMAScript6)
const largestOfFour = (arr) => arr.map(el => Math.max(...el));
如果您想坚持自己的想法
function largestOfFour(arr) {
var largestNumbers = [];
for (var i = 0; i < arr.length; i++) { // Correct loop condition
var pulledSubArray = arr[i];
var biggestNumber = pulledSubArray[0];
for (var n = 1; n < pulledSubArray.length; n++) { // Correct loop condition
if (pulledSubArray[n] > biggestNumber) {
biggestNumber = pulledSubArray[n];
}
}
largestNumbers.push(biggestNumber); // Push biggest number outside the inner loop
}
return largestNumbers;
}
console.log(largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]));
&#13;
答案 2 :(得分:0)
问题在于代码:
if (pulledSubArray[n] > biggestNumber) {
biggestNumber = pulledSubArray[n];
} else if (pulledSubArray[n] < biggestNumber) {
largestNumbers.push(biggestNumber);
break;
}
对于数组[4, 5, 1, 3]
,对于第二次迭代,biggestNumber
持有4
,pulledSubArray[n]
将持有5
。对于这种情况,你是否会推动该值并打破循环。但是你没有检查整个阵列。所以你不会得到准确的结果。
for (var i = 0; i > arr.length; i++){
这永远不会进入循环。它应该是i < arr.length
for (var n = 0; n > pulledSubArray.length; n++) {
var biggestNumber = 0;
if (pulledSubArray[n] > biggestNumber) {
变量应在循环外声明。您当前正在每次迭代中将其值设置为0
。因此,您最终会获得最后一个值,因为if (pulledSubArray[n] > biggestNumber)
将始终返回true。
更新代码:
function largestOfFour(arr) {
var largestNumbers = [];
for (var i = 0; i < arr.length; i++) {
var pulledSubArray = arr[i];
var biggestNumber = 0;
for (var n = 0; n < pulledSubArray.length; n++) {
if (pulledSubArray[n] > biggestNumber) {
biggestNumber = pulledSubArray[n];
}
}
largestNumbers.push(biggestNumber)
}
return largestNumbers;
}
var list = largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]);
console.log(list)