Я работаю над функцией поиска, которая находит песню, где поиск соответствует имени исполнителя и названию трека. Если эта тема вас интересует и у вас есть идеальный метод ее решения, ваш вклад будет принят с благодарностью. Это больше логический вопрос, чем вопрос о знании программирования.
Вот мой текущий код.
searchPlaylist: function(a,b){
var retArr = [];
if (typeof a === 'string') a = eval(a);
$.each(b, function(i,v){
if (typeof v['id'] !== "string" || typeof v['artist'] !== "string" || typeof v['track'] !== "string") return;
var artist = v['artist'].replace(/[^a-zA-Z 0-9]+/g,'').replace(' ',' ').replace(' ',' ');
var track = v['track'].replace(/[^a-zA-Z 0-9]+/g,'').replace(' ',' ').replace(' ',' ');
if (artist.match(a) || track.match(a)) retArr.push(i);
});
aC.searchLength = retArr.length;
return retArr;
}
И вот как я вызываю функцию.
doSearch: function(){
var val = $.trim($("#sB").val().replace(/[^a-zA-Z 0-9]+/g,'').replace(' ',' ').replace(' ',' '));
if (1 < val.length && val != search) {
aC.search = val;
var rlength = aC.searchLength;
aC.searchResults = aC.searchPlaylist("/" + aC.search + "/i", aC.playlist);
if (aC.searchLength > 0) $("#sresultcount").text(aC.searchLength);
if (rlength != aC.searchLength) {
aC.loadPlaylist($.grep(aC.playlist, function(v,i){
return $.inArray(i,aC.searchResults) > -1;
}));
}
} else if (0 == val.length) {
aC.search = "";
aC.searchLength = 0;
$("#sresultcount").empty();
aC.loadPlaylist(aC.playlist);
}
}
В функцию aC.searchPlaylist передается оператор RegEx для поиска, а вторым аргументом является переменная массива, в котором хранится список воспроизведения.
Вот структура массива плейлистов.
aC.playlist = [
{"id":"bd6ve0ydHVo","artist":"0SM","track":"The Landing feat. Alex G - Original Mix","img":"http://i.ytimg.com/vi/bd6ve0ydHVo/default.jpg","duration":322},
{"id":"KIijaPllLNI","artist":"2 Chainz","track":"No Lie - Explicit Version","img":"http://i.ytimg.com/vi/KIijaPllLNI/default.jpg","duration":240},
{"id":"esBlVulbkQQ","artist":"2 LIVE CREW","track":"We Want Some P--sy","img":"http://i.ytimg.com/vi/esBlVulbkQQ/default.jpg","duration":170},
{"id":"5sc_nQiuDN0","artist":"2 LIVE CREW","track":"Face Down A-- Up","img":"http://i.ytimg.com/vi/5sc_nQiuDN0/default.jpg","duration":115},
{"id":"42vxicGNumM","artist":"2 LIVE CREW","track":"Me So Horny","img":"http://i.ytimg.com/vi/42vxicGNumM/default.jpg","duration":284},
{"id":"42boE4fc5X4","artist":"2 LIVE CREW","track":"Hoochie Mama","img":"http://i.ytimg.com/vi/42boE4fc5X4/default.jpg","duration":180},
{"id":"sNRa1M39RRY","artist":"2Pac","track":"I Ain't Mad At Cha","img":"http://i.ytimg.com/vi/sNRa1M39RRY/default.jpg","duration":233},
{"id":"2cjv7hEAytU","artist":"2Pac","track":"Me Against The World","img":"http://i.ytimg.com/vi/2cjv7hEAytU/default.jpg","duration":283},
{"id":"8p9jSRxguAA","artist":"2Pac","track":"Ambitionz Az A Ridah","img":"http://i.ytimg.com/vi/8p9jSRxguAA/default.jpg","duration":276},
{"id":"W69SSLfRJho","artist":"2Pac","track":"Life Goes On","img":"http://i.ytimg.com/vi/W69SSLfRJho/default.jpg","duration":302},
{"id":"W6S7dAsIzIU","artist":"2Pac","track":"All Eyez On Me","img":"http://i.ytimg.com/vi/W6S7dAsIzIU/default.jpg","duration":318},
{"id":"khkx7yXzGhc","artist":"2Pac","track":"2 Of Amerikaz Most Wanted - (Explicit)","img":"http://i.ytimg.com/vi/khkx7yXzGhc/default.jpg","duration":316}
];
Вот какие, я думаю, должны быть результаты.
Ключевой запрос может быть одним из следующих:
живая команда — хочу немного ИЛИ живая команда хочет немного
Обычно я предпочитаю второй вариант, потому что я удаляю специальные символы, чтобы убрать дефис в первом примере.
Как вы можете решить дилемму, как только вы разделите строку на массив на основе пробелов, как мы будем искать по исполнителю или названию трека. (Я не думаю, что это хорошая идея, чтобы искать все доступные комбинации.)
Заранее спасибо. Ваше мнение будет оценено.