[英]iterate through array in javascript and return in new array
我對編碼完全陌生:我想遍歷數組輸入, select只有正數,然后將它們放入一個新的數組列表中,然后在控制台中打印新數組。 我在這里做錯了什么???
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);
由於我無法在評論中准確描述我想解釋的內容,因此我發布了一個答案:
當我像這樣格式化我的代碼時,我發現平衡大括號要容易得多
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
不應在循環內部,而應在 function 的末尾,因為一旦找到一個值,它將停止循環並立即僅返回數組內部的 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);
您的代碼中有 4 個錯誤
i<cut.length,你必須檢查輸入長度而不是 function 的長度
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);
我將嘗試在這里結合其他幾個答案中的觀點,並添加更多解釋。
您的大部分代碼都很好; 唯一的問題在你的for
循環中。 讓我們從上到下回顧一下。
for (var i=0; i<cut.length; i++){
你在這里有正確的想法。 但是,在這個for
循環中,您想讓i
從 0 循環到您正在循環的數組的長度——而不是您編寫的 function 的長度。 所以你應該用cut.length
替換input.length
。 這樣, i
將從 0 循環到 14。
if (i>0){
i
是您用來跟蹤您進入數組的距離的數字。 如上所述,對於您的數組,它將 go 從 0 到 14。您正在嘗試檢查第i
個 position 處的數字是否為正數,而不是i
本身是否為正數。 要訪問第i
個 position 的號碼,您可以使用input[i]
而不僅僅是i
。
liste.push(input[i]);
這條線很好; 干得好! 您在input
數組的第i
個 position 找到數字並將其添加到liste
。 由於之前的if
語句,只有當該數字為正時才會發生這種情況。
return liste;
此行將立即返回列表,退出您的cut
function。您希望僅在完成所有數字的循環后發生這種情況,因此您只需將此行移動到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 = [];
會發生什么? inside cut
,就像在 Shmack 的回答中一樣? 代碼還能用嗎? 為什么?cut
中的所有input
重命名為其他名稱,會發生什么情況? 代碼還能用嗎? 為什么?理解這些問題不是必需的,但了解答案可能會幫助您更好地為未來編碼。
但是等等,還有更多? 如果有一個內置功能可以更輕松地為我們做到這一點呢?
介紹過濾器!
filter
是一個有用的方法,所有 arrays 都可以讓他們根據您提供給他們的 function 過濾他們的內容。 使用filter
可以讓您完全繞過編寫for
循環(盡管練習編寫它們仍然很好;有時它們非常有用)。
您提供給filter
的 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);
for (var i=0; i<input.length; i++){
在這里你想要用戶 input.length 而不是 cut.length,因為你希望 i 到 go 通過輸入數組中的所有索引。
您還忘記了一個大括號來關閉 for 循環
此外,您正在從循環內部返回,這意味着循環已退出,因此一旦找到第一個元素,您將退出 function,因此您只會在列表中獲得一個元素。
像這樣的問題可以通過谷歌搜索來解決,但就目前而言,在你的第二個表達式中,你有i<cut.length
這沒有意義。 您必須將其更改為i < input.length
因為您想遍歷輸入。 您也不能有 return 語句,因為您將退出循環。 您還可以使用更高階的 function 像過濾器 function 來返回任何大於 0 input.filter((num) => num > 0)
希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.