在新数组中遍历 javascript 和 return 中的数组
iterate through array in javascript and return in new array
我完全不熟悉编码:我想遍历数组 input,select 只有正数,然后将它们放入一个新数组 liste 然后在控制台打印新数组。我在这里做错了什么?!?
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var liste = [];
function cut(input){
for (var i=0; i<cut.length; i++){
if (i>0){
liste.push(input[i]);
return liste;
}
}
var result = cut(input);
console.log(result);
for (var i=0; i<input.length; i++){
此处您希望用户 input.length 而不是 cut.length,因为您希望 i 遍历输入数组中的所有索引。
您还忘记了用大括号来关闭 for 循环
此外,您是从循环内部返回,这意味着循环已退出,因此一旦找到第一个元素,您将退出该函数,因此您的列表中只会得到一个元素。
你的代码有 4 个错误
i
i>0 ,它应该是 input[i]>0 ,因为你正在比较输入 indecis
if语句的花括号没有闭合
Return不在for循环外
修复所有这些后它应该可以工作
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var liste = [];
function cut(input){
for (var i=0; i<input.length; i++){ //error 1
if (input[i]>0){//2
liste.push(input[i]);
}//error 3
}
return liste;//error 4
}
var result = cut(input);
console.log(result);
由于我无法在评论中准确描述我想解释的内容,因此我发布了一个答案:
当我像这样格式化我的代码时,我发现平衡大括号要容易得多
function cut(input)
{
for (var i=0; i<cut.length; i++)
{
if (i>0)
{
liste.push(input[i]);
return liste;
}
}
现在很明显不平衡支架在哪里。
还有其他语法错误,其他人已经指出:
- 不是
cut.length
,而是input.length
。
- 您的
if
语句需要 if (input[i] > 0)
,而不是 if (i > 0)
return liste
不应在循环内部,而应在函数末尾,因为一旦找到一个值,它将停止循环并立即 return 只有 1 个值在内部数组。
这里应该是您打算执行的工作示例。除了那几个语法错误,逻辑做得很好!
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
function cut(input){
let liste = [];
for (var i=0; i<input.length; i++){
if (input[i]>0){
liste.push(input[i]);
}
}
return liste;
}
var result = cut(input);
console.log(result);
像这样的问题可以通过谷歌搜索来解决,但目前看来,在你的第二个表达式中,你有 i<cut.length
这没有意义。您必须将其更改为 i < input.length
因为您想要遍历输入。您也不能有 return 语句,因为您将退出循环。您还可以使用高阶函数,例如过滤函数 return 任何大于 0 的数字。input.filter((num) => num > 0)
希望这对您有所帮助!!
我会尝试在这里结合其他几个答案中的观点,并添加更多解释。
修复 For 循环,一次一行
你的大部分代码都很好;唯一的问题是在您的 for
循环中。让我们从上到下回顾一下。
for (var i=0; i<cut.length; i++){
你的想法是正确的。但是,在这个 for
循环中,您希望 i
从 0 循环到您正在循环的数组的长度——而不是您编写的函数的长度。因此,您应该将 cut.length
替换为 input.length
。这样,i
将从 0 循环到 14。
if (i>0){
i
是一个数字,用于跟踪您进入阵列的距离。如上所述,对于您的数组,它将从 0 到 14。您正在尝试检查第 i
位置的数字是否为正数,而不是 i
本身是否为正数。要访问第 i
个位置的数字,您可以使用 input[i]
而不是 i
.
liste.push(input[i]);
这条线没问题;干得好!您正在 input
数组的第 i
位置找到数字并将其添加到 liste
。由于之前的 if
语句,只有当该数字为正数时才会发生这种情况。
return liste;
此行将立即 return 列表,退出您的 cut
功能。您希望仅在完成所有数字的循环后才发生这种情况,因此您只需要在 for
循环之后移动此行。
还有最后一件事——您忘记了用花括号来结束您的 if
语句。小心这一点,因为它会弄乱你的程序。
我已经进行了所有这些更改。您可以在以下代码段中查看它们:
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var liste = [];
function cut(input){
for (var i=0; i<input.length; i++){
if (input[i]>0){
liste.push(input[i]);
}
}
return liste;
}
var result = cut(input);
console.log(result);
一些需要探索的东西:
- 如果您将
var liste = [];
移到 cut
内会发生什么,就像 Shmack 的回答一样?代码还能用吗?为什么?
- 如果将
cut
中的所有 input
重命名为其他名称会怎样?代码还能用吗?为什么?
理解这些问题不是必需的,但了解答案可能会帮助您在未来更好地编码。
更好的方法
等等,还有更多!如果有一个 built-in 功能可以为我们更轻松地做到这一点呢?
介绍filter!
filter
是一种所有数组都具有的有用方法,可让它们根据您提供的函数过滤其内容。使用 filter
可以让您完全绕过编写 for
循环(尽管练习编写它们仍然很好;有时它们非常有用)。
你提供给filter
的函数通常写成一个"arrow function",基本上就是转这个:
function(input){
//Do stuff
return output;
}
进入这个:
(input) => {
//Do stuff
return output;
}
它对于编写快速的小函数非常有用,所以我将在示例中使用它。
要使用 filter
和箭头函数过滤数组,您所要做的就是:
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var result = input.filter((number)=>{return number > 0});
console.log(result);
我完全不熟悉编码:我想遍历数组 input,select 只有正数,然后将它们放入一个新数组 liste 然后在控制台打印新数组。我在这里做错了什么?!?
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var liste = [];
function cut(input){
for (var i=0; i<cut.length; i++){
if (i>0){
liste.push(input[i]);
return liste;
}
}
var result = cut(input);
console.log(result);
for (var i=0; i<input.length; i++){
此处您希望用户 input.length 而不是 cut.length,因为您希望 i 遍历输入数组中的所有索引。
您还忘记了用大括号来关闭 for 循环
此外,您是从循环内部返回,这意味着循环已退出,因此一旦找到第一个元素,您将退出该函数,因此您的列表中只会得到一个元素。
你的代码有 4 个错误
i
i>0 ,它应该是 input[i]>0 ,因为你正在比较输入 indecis
if语句的花括号没有闭合
Return不在for循环外
修复所有这些后它应该可以工作
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var liste = [];
function cut(input){
for (var i=0; i<input.length; i++){ //error 1
if (input[i]>0){//2
liste.push(input[i]);
}//error 3
}
return liste;//error 4
}
var result = cut(input);
console.log(result);
由于我无法在评论中准确描述我想解释的内容,因此我发布了一个答案:
当我像这样格式化我的代码时,我发现平衡大括号要容易得多
function cut(input)
{
for (var i=0; i<cut.length; i++)
{
if (i>0)
{
liste.push(input[i]);
return liste;
}
}
现在很明显不平衡支架在哪里。
还有其他语法错误,其他人已经指出:
- 不是
cut.length
,而是input.length
。 - 您的
if
语句需要if (input[i] > 0)
,而不是if (i > 0)
return liste
不应在循环内部,而应在函数末尾,因为一旦找到一个值,它将停止循环并立即 return 只有 1 个值在内部数组。
这里应该是您打算执行的工作示例。除了那几个语法错误,逻辑做得很好!
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
function cut(input){
let liste = [];
for (var i=0; i<input.length; i++){
if (input[i]>0){
liste.push(input[i]);
}
}
return liste;
}
var result = cut(input);
console.log(result);
像这样的问题可以通过谷歌搜索来解决,但目前看来,在你的第二个表达式中,你有 i<cut.length
这没有意义。您必须将其更改为 i < input.length
因为您想要遍历输入。您也不能有 return 语句,因为您将退出循环。您还可以使用高阶函数,例如过滤函数 return 任何大于 0 的数字。input.filter((num) => num > 0)
希望这对您有所帮助!!
我会尝试在这里结合其他几个答案中的观点,并添加更多解释。
修复 For 循环,一次一行
你的大部分代码都很好;唯一的问题是在您的 for
循环中。让我们从上到下回顾一下。
for (var i=0; i<cut.length; i++){
你的想法是正确的。但是,在这个 for
循环中,您希望 i
从 0 循环到您正在循环的数组的长度——而不是您编写的函数的长度。因此,您应该将 cut.length
替换为 input.length
。这样,i
将从 0 循环到 14。
if (i>0){
i
是一个数字,用于跟踪您进入阵列的距离。如上所述,对于您的数组,它将从 0 到 14。您正在尝试检查第 i
位置的数字是否为正数,而不是 i
本身是否为正数。要访问第 i
个位置的数字,您可以使用 input[i]
而不是 i
.
liste.push(input[i]);
这条线没问题;干得好!您正在 input
数组的第 i
位置找到数字并将其添加到 liste
。由于之前的 if
语句,只有当该数字为正数时才会发生这种情况。
return liste;
此行将立即 return 列表,退出您的 cut
功能。您希望仅在完成所有数字的循环后才发生这种情况,因此您只需要在 for
循环之后移动此行。
还有最后一件事——您忘记了用花括号来结束您的 if
语句。小心这一点,因为它会弄乱你的程序。
我已经进行了所有这些更改。您可以在以下代码段中查看它们:
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var liste = [];
function cut(input){
for (var i=0; i<input.length; i++){
if (input[i]>0){
liste.push(input[i]);
}
}
return liste;
}
var result = cut(input);
console.log(result);
一些需要探索的东西:
- 如果您将
var liste = [];
移到cut
内会发生什么,就像 Shmack 的回答一样?代码还能用吗?为什么? - 如果将
cut
中的所有input
重命名为其他名称会怎样?代码还能用吗?为什么?
理解这些问题不是必需的,但了解答案可能会帮助您在未来更好地编码。
更好的方法
等等,还有更多!如果有一个 built-in 功能可以为我们更轻松地做到这一点呢?
介绍filter!
filter
是一种所有数组都具有的有用方法,可让它们根据您提供的函数过滤其内容。使用 filter
可以让您完全绕过编写 for
循环(尽管练习编写它们仍然很好;有时它们非常有用)。
你提供给filter
的函数通常写成一个"arrow function",基本上就是转这个:
function(input){
//Do stuff
return output;
}
进入这个:
(input) => {
//Do stuff
return output;
}
它对于编写快速的小函数非常有用,所以我将在示例中使用它。
要使用 filter
和箭头函数过滤数组,您所要做的就是:
let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15];
var result = input.filter((number)=>{return number > 0});
console.log(result);