2014-11-07 2 views
0

Я работаю над некоторым подходящим способом сортировки массива на основе строки поиска. Например вот массивСортировка массива на основе поиска текста с использованием чистого javascript

var myarray = ["2386", "1234", "3867"]; 

и вот строка, которую я хочу, чтобы найти в приведенном выше массиве

var searchkey = 123; 

После сортировки на основе поиска строки, то результат должен быть таким

var filtered_array= ["1234", "2386", "3867"]; 

То, что я хочу

for(var i = 0; i < myarray.length; i++) { 
    if (myarray[i].indexOf(searchkey) > 1) 
    { 
    filtered_array.push(myarray[i]); 
    }else{ 
    unfiltered_array.push(myarray[i]); 
    } 
} 

Ждут ценных предложений!

+1

В случае, если 'searchkey' не быть также строкой? – usr2564301

+0

Да, ключ поиска всегда будет такой же строкой, как яблоко, банан и т. Д. Это просто пример того, что я объяснил. –

+1

Я не понимаю логику сортировки. Что делать, если searchKey 238? Или 111? Или 321? – nicael

ответ

2
var myarray = ["2386", "1234", "3867"], searchkey = '123'; 

    function mySort(arrKeys,searchkey){ 
     var matchedKeys = [], notMatchedKeys = []; 

     for(var i = 0; i < arrKeys.length; i++) { 
       if (arrKeys[i].match(searchkey)) {//dummy logic 
        matchedKeys.push(arrKeys[i]);//push on the basis of order 
       }else{ 
        notMatchedKeys.push(arrKeys[i]); 
      } 
     } 
     return matchedKeys.concat(notMatchedKeys); 
    } 

    console.log(mySort(myarray,searchkey)); 
+0

Фантастический, вот и все, что мне нужно. –

0
var myarray = ["1234", "3432","2324","1230","3842","1236"]; 
var searchkey = 123; 
var filtered_array= []; 
for(var i = 0; i < myarray.length; i++) { 
    if (myarray[i].contains(searchkey)) { 
    filtered_array.push(myarray[i]); 
     delete myarray[i]; 
    } 
} 
var result_arr = filtered_array.concat(myarray); 
for(var j=0;j<result_arr.length;j++){ 
    if (result_arr[j] === undefined){ 

    result_arr.splice(j,1); 

    } 


} 
console.log(result_arr) 
+0

Метод splice() добавляет/удаляет элементы в/из массива и возвращает удаленные элементы. –

1

Я использовал levinstien для сравнения строк, вы можете проверить источник levenstien fiddle demo.

= https://github.com/gf3/Levenshtein,

мой код

function compare(a, b) { 
    var leva = new Levenshtein(a,searchkey).distance; 
    var levb = new Levenshtein(b,searchkey).distance; 
    return leva-levb; 
} 


var myarray = ["2386", "1234", "3867"]; 
var searchkey = "123"; 
myarray.sort(compare); 
Смежные вопросы