我正在进行一项编码挑战,获取一个由子数组组成的给定数组,在每个子数组中搜索最大的数字,最后返回一个只包含最大数字的新数组。我的思路是从每个子数组中创建变量,编写一个for循环来比较数组中的每个值,然后将最大值推送到一个新数组中。在编写了我的第一个for循环之后,我测试了我的代码,发现我得到了一个意想不到的结果,整个第一个子数组被压入了我的新数组。在我写下三个循环之前,我在寻找错误。谢谢你。编辑:这是给初学JavaScript的程序员的,建议在你的解决方案中使用比较操作符。
function largestOfFour(arr) {
var one = arr[0];
var two = arr[1];
var three = arr[2];
var four = arr[3];
var newArr = [];
for (var i = 0; i < one.length; i++){
var oneLrg = 0;
if (one[i] > oneLrg){
oneLrg = one[i];
}
newArr.push(oneLrg);
}
return arr;
}
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])); //This test case returns [4,5,1,3] instead of just [5]
毫无疑问,@Austin汉森和我都在利用同样的学习环境来应对这一挑战:自由代码营。
我自己刚刚经历了这个挑战(FCC称之为“篝火”),我想我会提供一个与@Oriol的“优秀”非常吻合的解决方案
我已经包括了一个关于代码块的特别说明,因为对于我们这些新手(在FCC或其他地方)来说,没有代码块可能会让我们适应几个小时:)
function largestOfFour(arr) {
var finalArray = [];
for(i = 0; i < arr.length; i++) { // iterates through each array
var max = -Infinity;
for(j = 0; j < arr[i].length; j++) { // iterates through each sub-array
if(arr[i][j] > max) { // comparing each successive element within the sub-array to what is currently stored as max
max = arr[i][j]; //if the ">" comparison is true then max gets updated
}
}
finalArray.push(max); // ensure this is OUTside of the j for loop. putting it INside the j for loop returns a very long (and wrong) array. try it.
}
console.log(finalArray);
return finalArray;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
https://jsbin.com/puweci/edit?js,console
FCC认可以下不利用Array.push()的解决方案。
function largestOfFour(arr) {
var results = [];
for (var i = 0; i < arr.length; i++) {
var max = -Infinity;
for (var j = 0; j < arr[i].length; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
}
}
results[i] = max;
}
return results;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
这里的问题是,您在每次循环迭代中都覆盖了oneLrg
,并将其放入同一个循环中,因此您将每个值与0进行比较,然后,由于one[i]
试试这个:
var oneLrg = 0;
for (var i = 0; i < one.length; i++){
if (one[i] > oneLrg){
oneLrg = one[i];
}
}
newArr.push(oneLrg);
使用
var newArr = [];
for(var i=0; i<arr.length; ++i) { // Iterate array
var maximum = -Infinity; // Initial maximum
for(var j=0; j<arr[i].length; ++j) // Iterate subarrays
if(arr[i][j] > maximum) // Compare
maximum = arr[i][j]; // Update maximum
newArr.push(maximum); // Store the real maximum
}
使用< code>Math.max
:
var newArr = [];
for(var i=0; i<arr.length; ++i) { // Iterate array
var maximum = -Infinity; // Initial maximum
for(var j=0; j<arr[i].length; ++j) // Iterate subarrays
maximum = Math.max(maximum, arr[i][j]); // Update maximum
newArr.push(maximum); // Store the real maximum
}
添加< code >应用:
var newArr = [];
for(var i=0; i<arr.length; ++i) // Iterate array
newArr.push( // Store ...
Math.max.apply(Math, arr[i]) // ... the maximum of the subarray
);
添加埃克马脚本 5 地图,
var newArr = arr.map(function(subarray) {
return Math.max.apply(Math, subarray);
});
添加弹性体脚本 5 绑定,
var newArr = arr.map(Function.apply.bind(Math.max, Math));
或者添加ECMAScript 6箭头函数和扩展运算符,
var newArr = arr.map(subarray => Math.max(...subarray));
此请求不使用2D数组。考虑以下结构的1D数组,其中索引从零开始,长度从一开始: 节0是单个单元格的数组。 第1节 null null null null 到目前为止,我使用一个语句的公式只能获得第一节(不是第2节或第3节)。希望找到一组公式来实现目标,而不使用语句或循环。以下是我目前掌握的信息:
问题内容: 假设我们有以下js数组 是否有一个js内置函数或jQuery的一个,使用它可以搜索阵列 AR 的 VAL ? 谢谢 *_ _ _更新 _ _ * _ __** 根据 融合的 反应,我创建了这个原型 问题答案: 您可以创建一个哈希。
问题内容: 从如下所示的数组中,如何获取数组中最大值的索引。对于下面的数组,期望的结果将为‘11’。 问题答案: 我的解决方案是: 注意: 这样,您可以检索与给定 最大值 相关的 每个键 。 __ 如果您只对 其中一个键 感兴趣,只需使用 $ maxs [0]
问题内容: 还有其他方法可以在Postgres的列中搜索某个值吗? 我目前安装的Postgres版本并 没有 让下面的语句: 数组示例: 该语句应返回数组包含的每一行。 问题答案: 对于相等性检查,您可以简单地: 在手册中阅读有关ANY / SOME的信息 。
给出了一个由N个整数组成的数组。 数组的最大和是该数组的非空连续子数组的元素的最大和。 例如,数组[1,-2,3,-2,5]的最大和是6,因为子数组[3,-2,5]的和是6,并且不可能实现更大的子数组和。 现在,您只能从给定数组中删除一个以上的元素。这样做可以得到的结果数组的最大可能最大和是多少? 我正在用我自己的测试用例测试我的代码。我在Dev-C++上得到了正确的输出。但是当我在网上测试我的代
最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。