我正在开发一个搜索功能,可以找到搜索匹配艺术家姓名和曲目名称的歌曲。如果您对此主题感兴趣并且有解决此问题的理想方法,您的意见将不胜感激。这更像是一个逻辑问题而不是编程知识问题。
这是我当前的代码。
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}
];
这就是我认为的结果应该是什么。
搜索词可以是以下之一:
现场工作人员 - 想要一些 或 现场工作人员想要一些
我通常更喜欢第二个选项,因为我删除了特殊字符,所以第一个示例中的连字符会被删除。
一旦您将字符串拆分为基于空格的数组,您就可以看出困境,我们如何在艺术家或曲目名称中搜索。(我认为搜索所有可用组合不是一个好主意。)
提前致谢。您的意见将不胜感激。