【问题标题】:forEach loop to pull element from array & push into new arrayforEach 循环从数组中提取元素并推入新数组
【发布时间】:2018-08-25 14:42:18
【问题描述】:

我试图让我的 forEach 循环遍历 varfruit 并将找到的任何字符串推入 arr2。

这是我的代码:

var fruit = [1,2,3, "apple", "banana", "grape"] 

function isString(fruit) {
var arr2 = []
fruit.forEach(function(element) {
if(element == "string"){
arr2.push(element)
}
return arr2
})

}

//期望的输出是 arr2 = "apple", "banana", "grape"

我不确定我在这里做错了什么。感谢您的建议。

【问题讨论】:

  • 你需要使用类似typeof (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…) 来获取类型:if (typeof element === "string")
  • 试试if(typeof element == "string"){。现在您正在检查1 == "string"2 == "string"3 == "string""banana" == "string" 等等.. 这将是false。您基本上是想检查它们的类型,而不是值。
  • 谢谢@ArupRakshit,这有助于我理解我做错了什么。

标签: javascript loops foreach push


【解决方案1】:

我在我的一个代码中使用了这个 foreach 序列...也许会对你有所帮助。

字符串[] 正文;

字符串优先 = Body.First(); // 获取“Body”数组第一个索引的内容

    if (first != "")                // if first index of "Body" array contain data's
    {
      string  Content = "";

        foreach (string line in Content)        // do something
        {
            Content = Content + line + "\n";
        }
    }

【讨论】:

    【解决方案2】:

    你应该使用typeof并在函数isString的末尾返回arr2

    var fruit = [1,2,3, "apple", "banana", "grape"] 
    
    function isString(fruit) {
      var arr2 = [];
      fruit.forEach(function(element) {
        if(typeof element === "string"){
          arr2.push(element);
        }
      })
      
      return arr2;
    }
    
    console.log(isString(fruit))

    顺便说一句,你可以使用filter 函数来缩短它

    var fruit = [1,2,3, "apple", "banana", "grape"];
    
    var fruitString = fruit.filter(function(element) {
       return typeof element === "string";
    });
    
    console.log(fruitString);

    【讨论】:

      【解决方案3】:

      Javascript 代码,可以使用:

      var fruit = [1,2,3, "apple", "banana", "grape", true, false]; 
      
      function isString(fruit) {
          var arr2 = [];
          fruit.forEach(function(element) {
              if (isNaN(element)) {   // only pushes the strings, not numbers or booleans
                  arr2.push(element);
              }
              console.log(arr2);  // output as wished: apple, banana, grape
          })
      }
      isString(fruit);
      

      【讨论】:

      • 嗨,欢迎来到 SO。干得好,感谢您的回答,请考虑在回答中解释您做了什么以及询问者做错了什么。人们我在搜索机中找到答案,所以一般来说一点解释很高兴
      【解决方案4】:

      替换:

        element == "string"
      

      与:

        typeof element == "string"
      

      因为您基本上在做的是比较实际数据而不是类型。

      【讨论】:

        【解决方案5】:

        两个问题:

        1. 您将 return 放入循环中。所以在循环完成之前return。这意味着第一个不是字符串的元素,它返回并且你得到一个空数组。

        2. element == "string" 不是检查类型的正确方法。你可以使用typeof element === "string"

        还有第三个可能的问题,那就是您实际上必须调用该函数。找到下面的工作代码:

        var fruit = [1, 2, 3, "apple", "banana", "grape"]
        
        function isString(fruit) {
            var arr2 = []
            fruit.forEach(function(element) {
                if (typeof element === "string") {
                    arr2.push(element)
                }
        
            })
            return arr2;
        
        }
        
        isString(fruit);
        

        【讨论】:

          猜你喜欢
          • 2018-06-10
          • 1970-01-01
          • 2021-09-05
          • 2011-02-20
          • 2011-09-30
          • 1970-01-01
          • 2012-02-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多