js模拟百度搜索方法【字符串搜索】 - yuzhouxiaogegit/blog GitHub Wiki

js模拟百度搜索方法【字符串搜索】

【功能】:搜索字符串进行排序,支持数字和字符串搜索。这里排序算法采用了【插入排序】。

【注意】:不建议在数组中传入json对象,否者会被强制转换为字符串。

【代码示例】

【注意事项】内层json名字不建议外层json名称重名,否者内层json对象会覆盖外层json对象

/*
    函数名:strSearch 模拟百度搜索工能
    参数:tempArr 需要搜索的数组, 数组中的值建议为字符串
    参数:searchVal 搜索数组中的值,支持模糊搜索,值为字符串
*/

function strSearch(tempArr, searchVal) {

    var newTempArr = [];
    var tempArrLength = tempArr.length;

    // 取出包含 searchVal 的值,放入数组中
    for (var k = 0; k < tempArrLength; k++) {
        // 如果不是string 则转换为字符串
        typeof tempArr[k] != 'string' && (tempArr[k] = JSON.stringify(tempArr[k]));
        if (tempArr[k].indexOf(searchVal) != -1) {
            newTempArr.push(tempArr[k]);
        } else {
            continue;
        }
    }

    tempArrLength = newTempArr.length;

    // 通过字符串长度排序,最短的在最前面,这里采用了插入排序算法
    for (var i = 0; i < tempArrLength; i++) {
        var minIndex = i;
        for (var j = i; j < tempArrLength; j++) {
            if (newTempArr[j].length < newTempArr[minIndex].length) { //找到最小的数
                minIndex = j; //将最小数的索引保存
            }else{ continue;}

        }
        var temp = newTempArr[minIndex];
        newTempArr[minIndex] = newTempArr[i];
        newTempArr[i] = temp;
    }

    return newTempArr;
}

// 函数调用示例
var tempArr = ['王五', '章守法的发', 81568888888888888888, 8, 88, 818, '88888888899999999', 1888111, '章守9法888888888的发', 'fafadfadfaf', 'fadfa', '5', '898989', 'fafadfadfaf', 'fasdfa', 'fafadfadfaf', 'rqerq', 'fafadfadfaf', '章守法88rqerq8888888的发', 'fafadfadfaf'];
var searchVal = '88';

console.log(strSearch(tempArr, searchVal))

js 模拟百度搜索方法【简洁版】

 /*
     函数名:strSearch 模拟百度搜索工能
     参数:tempArr 需要搜索的数组, 数组中的值建议为字符串
     参数:searchVal 搜索数组中的值,支持模糊搜索,值为字符串
 */
 
 function strSearch(tempArr, searchVal) {
     
     var newTempArr = [];
         // 取出包含 searchVal 的值,放入数组中并且通过长度排序
         newTempArr = tempArr.filter(function(v){
             typeof v != 'string' && (v = JSON.stringify(v));
             return (v.indexOf(searchVal) != -1);
         }).join(',').split(',').sort(function(a,b){return a.length - b.length;});
         
     return newTempArr;
 }
 
 // 函数调用示例
 var tempArr = ['王五', '章守法的发', 81568888888888888888, 8, 88, 818, '88888888899999999', 1888111, '章守9法888888888的发', 'fafadfadfaf', 'fadfa', '5', '898989', 'fafadfadfaf', 'fasdfa', 'fafadfadfaf', 'rqerq', 'fafadfadfaf', '章守法88rqerq8888888的发', 'fafadfadfaf'];
 var searchVal = '88';
 console.log(strSearch(tempArr, searchVal))