我希望用输出执行一个程序:
console.log(range(1, 10));
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1, 10)));
// → 55
我收到array.length的错误。请找到以下代码:
var array = [];
function range (arr){
var lower = Math.min(arr[0],arr[1]);
var upper = Math.max(arr[0],arr[1]);
for (var i=lower;i<=upper;i++){
array.push(i);
}
}
function sum(array){
for(var i=0;i < array.length;i++){
var total = total+array[i];
}
}
console.log(sum(range(1, 10)));
我处于初级水平,请帮忙。 感谢。
答案 0 :(得分:2)
调用您定义的范围函数时需要传递一个数组range([1, 10])
您需要重写和函数
作为旁注,有更有效的方法可以计算一系列元素的总和而无需迭代它们。
function sum_of_range(start, end) {
return end * (end + 1) / 2 - start * (start + 1) / 2;
}
编辑:
这是一个工作和函数
function sum(array) {
var accumulator = 0;
for (var i = 0; i < array.length; ++i)
accumulator += array[i];
return accumulator;
}
答案 1 :(得分:2)
这里有一些问题:
1。)你没有在range
函数中返回任何内容。您需要返回填充的数组。
2。)你没有在sum
函数调用中正确传递数组。
3。)您在sum
函数调用中没有返回任何内容。
在不返回任何值的情况下,您不能让代码块与彼此一起使用
var array = [];
function range (arr){
var lower = Math.min(arr[0],arr[1]);
var upper = Math.max(arr[0],arr[1]);
for (var i=lower;i<=upper;i++){
array.push(i);
}
return array; // return the array to be used in the sum function
}
function sum(array){
var total = 0; // need to create a variable outside the loop scope
for(var i in array){
total = total+array[i];
}
return total;
}
console.log(sum(range([1,10]))); // pass the array correctly
请注意,您需要在total
函数中将for-loop
变量设置在sum
范围之外。这样你就可以返回最终值。否则,它将返回undefined
。
答案 2 :(得分:1)
您需要修改sum
&amp; range
功能
function range (){
var array = [];
var lower = Math.min.apply(null, arguments);
var upper = Math.max.apply(null, arguments);
for (var i=lower;i<=upper;i++){
array.push(i);
}
return array;
}
function sum(array){
return array.reduce((x,y)=>x+y,0);
}
console.log(range(1, 10));
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1)); //if we are considering min & max from params
// [-1, 0, 1, 2, 3, 4, 5]
console.log(sum(range(1, 10)));
// 55
答案 3 :(得分:1)
在这里,您将一个参数声明为数组
function range (arr){
...
但是你在这里调用一个带有两个参数的函数数字
console.log(range(1, 10));
使用此通话功能
console.log(range([1, 10]));
并且不使用for..in
数组
for(var i in array){ it doesn't work as you expect
使用forEach
功能或计划for
循环
您在sum
功能
见下面的工作示例:
function range(arr) {
var array = [];
var lower = Math.min(arr[0], arr[1]);
var upper = Math.max(arr[0], arr[1]);
for (var i = lower; i <= upper; i++) {
array.push(i);
}
return array;
}
function sum(array) {
var total = 0;
for (var i = 0; i < array.length; i++) {
total = total + array[i];
}
return total;
}
document.write('range ' + range([1, 10]) + '<br>');
document.write('sum ' + sum(range([1, 10])));
答案 4 :(得分:0)
你好亲爱的现在检查一下。
var array = [];
function range(arr, arr1) {
var lower = Math.min(arr);
var upper = Math.max(arr1);
for (var i = lower; i <= upper; i++) {
array.push(i);
}
}
function sum() {
var total = 0;
for (var i = 0; i < array.length; i++) {
total = total + array[i];
}
return total;
}
console.log(sum(range(1, 10)));
答案 5 :(得分:0)
这是Eloquent JavaScript
中数据结构章节末尾问题的正确答案function range(start, end, step) {
let arr = []; //declare an empty array
var step = step || 1;//tests to see if step was supplied, otherwise it's 1
if(start < end)
{
for(let i = start; i <= end; i += step)
{
arr.push(i);
}
}
else
{
for(let i = start; i >= end; i += step)
{
arr.push(i);
}
}
return arr;
}
function sum(array) {
let total = 0;
for(let i = 0; i < array.length; i++)
{
total += array[i];
}
return total;
}
console.log(range(1, 10));
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1,10)));
// → 55
答案 6 :(得分:0)
此解决方案考虑了输入一个预期不会为正/负的步骤,即范围从1到5,我们希望该步骤为正,但是如果用户以某种方式输入了否定步骤,则为空数组就会发生。
如果期望减少数组,但步长大于0,则浏览器实际上挂在相反的位置。
'use strict';
function range(start, end, step = 1){
let output = [];
if (start > end){
// Sanity check, all steps if expected to go down should be negative
if (step > 0){
step = -step;
}
for (;start >= end; start += step){
console.log(start);
output.push(start);
}
}
else{
// Likewise, as all steps should be positive
if (step < 0){
step = -step;
}
for (;start <= end; start += step){
output.push(start);
}
}
return output;
}
function sum(arr){
let output = 0;
for (let i of arr){
output += i;
}
return output;
}
console.log(range(1, 5, 1));
// → [1, 2, 3, 4, 5]
console.log(range(5, 1, -1));
// → [5, 4, 3, 2, 1]
// Notice this one step is a positive, but this is handled (original solution returned empty array)
console.log(range(5, 1, 1));
// → [5, 4, 3, 2, 1]
console.log(sum(range(1,10)));
// → 55
对此的一种改进是对数组使用reduce函数求和而不是for循环,即:
function sum(array){
return array.reduce((x,y)=>x+y,0);
}
答案 7 :(得分:0)
对于像我以后发现的人来说,这是一种编写range
函数的方法,因此您可以按照原始问题中的输入来传递输入:
console.log(sum(range(1, 10)));
…和一个清理过的sum
函数类似于A. Sharma's answer中的函数:
function range(lower, upper) {
let array = []
for (let i = lower; i <= upper; i++) {
array.push(i);
}
return array;
}
function sum(array) {
let total = 0;
for (let i in array) {
total = total + array[i];
}
return total;
}
console.log(sum(range(1, 10)));
也值得一提:
reduce
,这很优雅,但并不像Mathias Vonende pointed out那样完全明显和友好。 答案 8 :(得分:0)
这是我所拥有的最佳解决方案
function range(x,y){
var arr = [];
for(x;x<=y;x++){
arr.push(x);
};
return arr;
};
function sum(array){
return array.reduce((a,b) => a + b, 0);
};
console.log(sum(range(1,10)));