Поиск по первым буквам слова

317
29 октября 2017, 21:20

Пишу поиск для аудиоплеера. Возникла проблема: почему-то пишет что allForSearch is not defined

var songs = [{
   url: 'http://tegos.kz/new/mp3_full/Redfoo_-_New_Thang.mp3',
   artist: {
       name: 'Redfoo',
       song: 'New Thang'
   }
},
{ 
   url: 'http://a.tumblr.com/tumblr_lpoc6cHNDP1r0jthjo1.mp3',
   artist: {
            name: 'Hugo',
            song: '99 Problems'
        }
    }
];
search = () => {
  const {
    songs
  } = this.state;
  var input = this.textInput.value;
  songs.forEach(function(item) {
    var names = item.artist.name,
      song = item.artist.song,
      allForSearch = names.concat(song);
  });
  function init() {
    let template = `<td><a href=#>%name</a></td>`,
      search = document.querySelector('.search'),
      tr = document.querySelector('.mess-hide'),
      render = a => tr.innerHTML = a.map(e => template.replace('%name', e)).join(`\n`);
    search.addEventListener('.search', function(e) {
      let value = input.toLowerCase();
      render(allForSearch.filter(e => e.toLowerCase().startsWith(value)));
    });
    render(allForSearch);
  }
}

<table className="table">
  <tr className="mess-hide">
  </tr>
</table>

Немного объясню: songs массив объектов. С помощью forEach я копирую все названия и имена в другой массив для того что бы осуществлять поиск. Но почему-то с allForSearch возникают проблемы. Почему так может быть?

Answer 1

allForSearch объявляется внутри функции, переданной в songs.forEach

songs.forEach(function(item) {
  var names = item.artist.name,
    song = item.artist.song,
    allForSearch = names.concat(song);
});

Объявите var allForSearch глобально, наряду с var songs = [], либо внутри блока search = () => {

READ ALSO
Два связанных canvas в Fabric.js

Два связанных canvas в Fabric.js

Подскажите как реализовать два связанных canvasСуть в том, что если меняешь что-то в первом, то такие же изменения происходят на втором и наоборот

365
Приватные и не только переменные

Приватные и не только переменные

Есть задача подключить вебсокеты

308
повесить\забрать класс active на JS

повесить\забрать класс active на JS

Господа, задача простая: повесить\забрать класс с массива ссылокНашёл код, где не пойму какую роль играет в while el

297