цикл forEach для извлечения элемента из массива и вставки в новый массив - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь, чтобы мой цикл forEach проходил через var fruit и помещал все найденные строки в 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 = "яблоко", "банан", "виноград"

Я не уверен, чтоЯ делаю не так здесь.Спасибо за любой совет.

Ответы [ 5 ]

0 голосов
/ 25 августа 2018

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);
0 голосов
/ 25 августа 2018

Вы должны использовать typeof и возвращает arr2 в конце функции isString

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);
0 голосов
/ 25 августа 2018

Два вопроса:

  1. Вы помещаете возврат в цикл.Так что 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);
0 голосов
/ 25 августа 2018

Я использую эту последовательность foreach в одном из моих кодов ... возможно, это поможет вам.

string [] Body;

string first = 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";
        }
    }
0 голосов
/ 25 августа 2018

Заменить:

  element == "string"

С:

  typeof element == "string"

Потому что в основном вы сравниваете фактические данные, а не тип.

...