返回一个数组,该数组由每个提供的子数组中的最大数字组成。为简单起见,提供的数组将包含4个子数组。 我得到输出[27,27,39,1001],但输出应该是[27,5,39,1001]。
function largestOfFour(arr) {
// You can do this!
var largest=[];
var gr=0;
for(var i=0;i<arr.length;i++){
for(var j=0;j<=arr[i].length;j++){
if(arr[i][j]>gr){
gr=arr[i][j];
}
}
largest.push(gr);
}
return largest;
}
largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 0 :(得分:3)
你的逻辑是不对的。要指出错误,请参阅下文。
迭代1
- &gt; gr = 0
- &gt; 27&gt; 0?
- &gt; gr = 27
- &gt;推gr(27)
迭代2
- &gt; gr = 27
- &gt; 5> 27?
- &gt;推gr(27)
迭代3
- &gt; gr = 27
- &gt; 39&gt; 27?
- &gt; gr = 39
-push gr(39)
迭代4
- &gt; gr = 1001
- &gt; 1001&gt; 39?
- &gt; gr = 1001
- &gt;推gr(1001)
尝试使用数组参数创建一个函数,该参数获取该参数中的最大数字,而不是声明一个新的for循环。
Array.max = function( array ){
return Math.max.apply( Math, array );
};
答案 1 :(得分:2)
您可以尝试这样的事情:
var data = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var maxArr = data.map(function(item){
return Math.max.apply(null,item)
});
document.write(maxArr);
&#13;
您的代码说明:
function largestOfFour(arr) {
// You can do this!
var largest=[];
var gr=0;
for(var i=0;i<arr.length;i++){
for(var j=0;j<=arr[i].length;j++){
if(arr[i][j]>gr){
gr=arr[i][j];
}
}
largest.push(gr);
}
return largest;
}
var r = largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
document.write(r)
&#13;
您编写工作文件,但问题出在var gr=0;
。这是在for loop
之外初始化的,因此它将第一个数组的最大数量与第二个数字进行比较,而27>5
的结果为{是假的},它只分配27个。
function largestOfFour(arr) {
// You can do this!
var largest = [];
for (var i = 0; i < arr.length; i++) {
var gr = 0;
for (var j = 0; j <= arr[i].length; j++) {
if (arr[i][j] > gr) {
gr = arr[i][j];
}
}
largest.push(gr);
}
return largest;
}
var r = largestOfFour([
[13, 27, 18, 26],
[4, 5, 1, 3],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]);
document.write(r)
&#13;
你需要为每次迭代重置gr
的这个值,因此,它应该在循环内初始化。
答案 2 :(得分:2)
你的功能是对的但你需要把var gr = 0;在第一个for循环中:
function largestOfFour(arr) {
// You can do this!
var largest=[];
for(var i=0;i<arr.length;i++){
var gr=0;
for(var j=0;j<=arr[i].length;j++){
if(arr[i][j]>gr){
gr=arr[i][j];
}
}
largest.push(gr);
}
return largest;
}
largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 3 :(得分:2)
try {
List<Future<String>> resultList=executor.invokeAll(list);
for(Future<String> f:resultList){
// if(f.isDone()){
System.out.println(f.get());
//}
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ExecutionException e) {
// TODO Auto-generated catch block
System.out.println("HELLO SOME ERROR");
// e.printStackTrace();
}
答案 4 :(得分:1)
尽管如此,它看起来像一个测试问题而且没有明确的问题。我将继续帮助你。
var arr = [[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]];
var res = [];
arr.forEach(function(val, ix){
var sub = val;
var large = 0;
for(var i=0;i<sub.length;i++){
if(sub[i] > large){
large = sub[i];
}
}
res.push(large);
});
小提琴:https://jsfiddle.net/jeremyrajan/hted9eg5/
如果查看代码,我使用forEach(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)循环遍历数组并收集子数组。然后在元素中运行for循环以找到最大数字。
唯一的区别是,在我的情况下,我用它来使事情变得更漂亮。
希望有所帮助!
答案 5 :(得分:0)
这是一种更清洁的方法,但如果你关心的话它会相对缓慢。
function get_array_of_largest(rank2Array){
var newArray = [];
for (var i = 0; i < rank2Array.length; i ++){
newArray.push(rank2Array[i].slice().sort(function(a, b){return a < b;})[0]);
}
return newArray;
}
.slice()
复制数组的一部分。由于没有给出任何参数,它会复制整个事物。
.sort()
根据函数对数组进行排序。鉴于我使用的函数排序,它按降序对数组进行排序(元素0因此是最大的)。
你的工作不起作用的原因是你在推动元素后没有将gr
重置为0.
答案 6 :(得分:0)
function largestOfFour(arr) {
var newArr=[];
for(i=0;i<arr.length;i++){
var num=Math.max.apply(null,arr[i]);
newArr.push(num);
}
return newArr;
}
以下函数使用Function.prototype.apply()来查找数值数组中的最大元素。 getMaxOfArray([1,2,3])等同于Math.max(1,2,3),但是你可以在任何大小的编程构造数组上使用getMaxOfArray()。
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
答案 7 :(得分:0)
function largestOfFour(arr) {
return arr.map(x => x.sort((a, b) => b - a)[0]);
}