Перебор массива в js

215
05 июня 2018, 11:00

Не пойму почему не прорабатывает как нужно функция в js:

let teams = [{ 
          Name: 'Vasa', 
          Age: 25 
        },{ 
          Name: 'Alex', 
          Age: 20 
        },{ 
          Name: 'Mark', 
          Age: 20 
        }] 
           
    
    function filterCountry(object,key) { 
    var arr1 = []; 
      key.forEach(function(item, i, arr) { 
         
        var result = object.filter(team => team.Age === item) 
        arr1.push(result[0]); 
         
      }); 
 
     return arr1; 
    } 
     
    var result1 = filterCountry(teams, [25,20]); 
     
    console.log(result1);

Почему функция .filter выбирает лишь один элемент, а не два?

Как сделать так, чтобы вывело все правильно?

Ожидаемый рез:

result1 = [{
      Name: 'Vasa',
      Age: 25
      },{
      Name: 'Alex',
      Age: 20
      },{
      Name: 'Mark',
      Age: 20
    }] 
Answer 1

filter выбирает два, вы берете только один. result[0].

Как вариант:

let teams = [{ 
  Name: 'Vasa', 
  Age: 25 
}, { 
  Name: 'Alex', 
  Age: 20 
}, { 
  Name: 'Mark', 
  Age: 20 
}, { 
  Name: 'Clark', 
  Age: 22 
}] 
//---------------------------------------------------------------- 
 
 
function filterCountry(object, key) { 
  var arr1 = []; 
  key.forEach(function(item, i, arr) { 
 
    var result = object.filter(team => team.Age === item) 
    if (result.length == 1) 
      arr1.push(result[0]); 
    else { 
      for (let i of result) { 
        arr1.push(i); 
      } 
    } 
 
  }); 
 
  return arr1; 
} 
 
var result1 = filterCountry(teams, [25, 20]); 
 
console.log(result1);

Answer 2

let teams = [{ 
  Name: 'Vasa', 
  Age: 25 
}, { 
  Name: 'Alex', 
  Age: 20 
}, { 
  Name: 'Mark', 
  Age: 20 
}] 
 
 
function filterCountry(object, key) { 
  return object.filter(team => key.some(age => team.Age == age)); 
} 
var result1 = filterCountry(teams, [25, 20]); 
 
console.log(result1);

READ ALSO
Как создать цикл вывода сообщения? Раз в 5-10 минут?

Как создать цикл вывода сообщения? Раз в 5-10 минут?

Разрабатываю бота на nodejsНужно чтобы бот выводил 1 сообщение раз в 5-10 минут например

153
Таймер обратного отсчета plugin [дубликат]

Таймер обратного отсчета plugin [дубликат]

На данный вопрос уже ответили:

163
Кастомизация балуна метки

Кастомизация балуна метки

1)Подскажите, как добавить изображение в балун?

215
Вывод тегов в виде тега, а не текста

Вывод тегов в виде тега, а не текста

В переменную Vue записан тег (переменная SomeTag и тег <a href="test">топ ссылка</a>)При выводе <div>{{SomeTag}}</div> выводит: <a href="test">топ ссылка</a>,...

173