簡體   English   中英

遍歷 javascript 中的數組並返回新數組

[英]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;
    } 
}

現在很明顯不平衡的支架在哪里。

還有其他人已經指出的其他語法錯誤:

  1. 它不是cut.length ,而是input.length
  2. 您的if語句需要是if (input[i] > 0) ,而不是if (i > 0)
  3. 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 個錯誤

  1. i<cut.length,你必須檢查輸入長度而不是 function 的長度

  2. i>0,應該是input[i]>0,因為你比較的是indecis

  3. if 語句的花括號沒有閉合

  4. 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循環中。 讓我們從上到下回顧一下。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM