2016-07-05 2 views
0

Я пытаюсь упорядочить строки в массиве в зависимости от числа, присутствующего в них, т.е. 'h2ello f3ere b1ow' должен возвращать массив из ['b1ow', 'h2ello', 'f3ere']. Следующий код работает с двумя элементами (h2ello и b1ow), но не при добавлении третьего. Кто-нибудь есть идея, почему это так?Порядок строк в массиве в соответствии с номером в строке

function order(words){ 
    var sentence = []; 
    words = words.split(" "); 
for (var i=0;i<words.length;i++){ 
    for (var m=0;m<words[i].length;m++){ 
    if (!isNaN(parseFloat(words[i][m])) && isFinite(words[i][m])){ 
    var idx = words[i][m]; 
     sentence.splice(idx, 0, words[i]); 
    } 
    } 
} 
console.log(sentence); 
} 

order('h2ello f3ere b1ow'); 

ответ

0

Если вы проверить документацию на сращивания: Array splice вы увидите, что если индекс больше, чем длина массива, он будет установлен на длину массива. Таким образом, он просто делает толчок, а не устанавливает нужный вам индекс. Одним из решений может быть установка вручную:

sentence[idx-1] = words[i] 

В зависимости от ваших потребностей вы могли бы также упростить вашу функцию совсем немного:

function order(words){ 
    words = words.split(" ").sort(function(a,b){ 
    return a.match(/\d/) - b.match(/\d/) // get first digit and compare them 
    }) 
console.log(words); 
} 
2

Легче будет прямой вид массива, без сращивания к место, где другие места неизвестны (в цикле).

В этом предложении используется Array#sort с обратным вызовом, который ищет некоторый десятичный знак для сортировки.

var array = 'h2ello f3ere b1ow'.split(' '); 
 

 
array.sort(function (a, b) { 
 
    return a.match(/\d+/) - b.match(/\d+/); 
 
}); 
 

 
console.log(array);

0

Я не знаю, который имеет более высокую производительность. У моего BTW меньше одного регулярного выражения за сравнение.

var sorted = 'h2ello f3ere b1ow'.split(' ') 
 
    .map(w => ({ key: w.match(/\d+/)[0], word: w })) 
 
    .sort((a, b) => a.key - b.key) 
 
    .map(o => o.word).join(' '); 
 

 
console.log(sorted);

Смежные вопросы