Как использовать push для создания нового массива? Неожиданная ошибка - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть этот код ниже

let geese = ["African", "Roman Tufted", "Toulouse", "Pilgrim", "Steinbacher"];
let array = ["Mallard", "Hook Bill", "African", "Crested", "Pilgrim",  "Toulouse", "Blue Swedish"];

function gooseFilter(array, geese) {
     var name = [];
     for (let i = 0; i < geese.length; i++) {
         if (array.includes(geese[i])) {
             name.push(geese[i]);
         }
         return name;    
     }
}

gooseFilter(array);

и у меня появляется ошибка «Не удается прочитать свойство« длина »неопределенного значения, и я не знаю почему. У вас есть идеи, как я могу это исправить?

Ответы [ 6 ]

2 голосов
/ 03 апреля 2019

Вы забыли передать второй аргумент. И ваше возвращение должно быть не в курсе. рассмотрим следующий фрагмент:

let geese = ["African", "Roman Tufted", "Toulouse", "Pilgrim",
    "Steinbacher"
];
let array = ["Mallard", "Hook Bill", "African", "Crested", "Pilgrim",
    "Toulouse", "Blue Swedish"
];

function gooseFilter(array, geese) {
    var names = [];
    for (let i = 0; i < geese.length; i++) {
        if (array.includes(geese[i])) {
            names.push(geese[i])
        }
    }
    return names;
}

console.log(gooseFilter(array, geese));
2 голосов
/ 03 апреля 2019

Вы объявляете переменную с именем geese здесь:

function gooseFilter(array, geese) {

Тогда вы определите это здесь:

gooseFilter(array);

Поскольку вы передаете только один аргумент, второй (geese) равен undefined.


Если вы хотите получить доступ к переменной geese, объявленной в более широкой области, тогда не маскируйте ее с другой переменной с тем же именем .

function gooseFilter(array) {
1 голос
/ 03 апреля 2019

Вместо

function gooseFilter(array, geese) {

сделайте это

function gooseFilter(geese) {
0 голосов
/ 03 апреля 2019

В вашем коде есть 2 ошибки:

  1. Вы определили функцию gooseFilter с 2 параметрами, но вызываете только с одним array, поэтому geese равно undefined.Вот почему вы получили ошибку

'длина' undefined

Вы return в цикле for.Это приведет к остановке цикла после первого элемента.

Код должен быть

let geese = ["African", "Roman Tufted", "Toulouse", "Pilgrim", 
"Steinbacher"];
let array = ["Mallard", "Hook Bill", "African", "Crested", "Pilgrim", 
"Toulouse", "Blue Swedish"];

function gooseFilter(_array, _geese) { // parameter # variable
     var name = [];
     for (let i=0; i<_geese.length; i++) {
       if (_array.includes(_geese[i])) {
       name.push(_geese[i])
       }
       // return name;  <-- Return here will stop the loop after the first item
     }
     return name; // return here instead
     
}

const rs = gooseFilter(array, geese) 

console.log(rs)
0 голосов
/ 03 апреля 2019

Вы определили функцию gooseFilter, которая принимает два аргумента, но затем при вызове вы передаете ей только один параметр: gooseFilter(array).

Вы должны передать оба определенных массива своей функции: gooseFilter(array, geese)

0 голосов
/ 03 апреля 2019

вызов gooseFilter (массив); со вторым аргументом

let geese = ["African", "Roman Tufted", "Toulouse", "Pilgrim", 
"Steinbacher"];
let array = ["Mallard", "Hook Bill", "African", "Crested", "Pilgrim", 
"Toulouse", "Blue Swedish"];

   function gooseFilter(array, geese) {
   var name = [];
   for (let i=0; i<geese.length; i++) {
     if (array.includes(geese[i])) {
     name.push(geese[i])
    }
   return name;    
  }
    }

  gooseFilter(array,geese);
...