2014-01-09 3 views
0

У меня есть строка!Элементы заказа из строки

  • 7 змеями
  • 4 велосипеды
  • 2 манго

Это из числа + [пробел] + вещь струнами. Мне нужно иметь возможность упорядочить всю строку со ссылкой на номер. Поэтому он должен выйти:

  • 2 манго
  • 4 велосипедов
  • 7 змеями

Это простая пузырьковая сортировка по количеству, а затем перекрестные ссылки индекса, чтобы получить окончательный заказ , Ниже приведен код JavaScript ниже, но я не могу не думать, что его можно было бы сделать более эффективным. Я пропустил трюк здесь?

И помните: я художник, поэтому я код в карандаше!

var eventsStr = "7 serpents\n4 bikes\n2 mangoes" 
var splitArr = eventsStr.split("\n") 
var numArray = new Array(); 
var events = new Array(); 

for (var i = 0; i < splitArr.length; i++) 
{ 
    var temp = splitArr[i] ; 
    var part1 = temp.substring(0, temp.indexOf(" ")) 
    var part2 = temp.substring(temp.indexOf(" ")+1, temp.length) 
    numArray[i] = part1; 
    events[i] = part2; 
} 

var sorted = superCopy(numArray); 
var sorted = sorted.sort(sortArrayNumerically); 
alert(getOrder(sorted, numArray, events)) 


function getOrder(orderedarr, arr1, arr2) 
{ 
    var str = ""; 
    for (var i = 0; i < arr1.length; i++) 
    { 
    for (var j = 0; j < orderedarr.length; j++) 
    { 
     if (arr1[i] == orderedarr[j]) 
     { 
     // found the thing !what is the event? 
     str += arr1[i] + " " + arr2[i] + "\n"; 
     } 
    } 
    } 
    return str 
} 

function sortArrayNumerically(a,b) 
{ 
    return a - b; 
} 

function superCopy(arr) 
{ 
    tempArr = new Array(); 
    for (var i = 0; i < arr.length; i++) 
    { 
    tempArr[i] = arr[i] 
    } 
    return tempArr 
} 
+1

Это лучше подходит для http://codereview.stackexchange.com/ – Andy

ответ

2

Вы можете использовать sort() функцию в JavaScript:

eventsStr.split('\n').sort().join('\n'); 

  • eventsStr.split('\n') - первый разбить строку на символ новой строки, чтобы создать массив
  • .sort() - используйте функцию sort() для сортировки массива
  • .join('\n') - затем поместите строку обратно вместе, соединяя элементы массива с новой строки между ними

Ссылка:


Это алфавитный вид, поэтому, если ваша строка содержит, скажем, 12 манго, результат не будет сортироваться численно. Для сортировки численно, вы могли бы сделать что-то вроде этого:

eventsStr.split('\n').sort(function(a, b) { 
    return parseInt(a.split(' ')[0], 10) > parseInt(b.split(' ')[0], 10); 
}).join('\n'); 

В этой ситуации функция sort() вызывается с параметром обратного вызова принимает 2 значения: первая строка для сравнения и второй строки для сравнения. Эта функция обратного вызова затем разделяет строку, извлекает номер и сравнивает его с номером в другой строке.

0

Использование

splitArr.sort() // as per your code 

DEMO

var eventsStr = "7 serpents\n4 bikes\n2 mangoes" 
arr = eventsStr.split('\n') 
# ["7 serpents", "4 bikes", "2 mangoes"] 
arr 
# ["7 serpents", "4 bikes", "2 mangoes"] 
arr.sort() 
# ["2 mangoes", "4 bikes", "7 serpents"] 
Смежные вопросы