2017-01-25 4 views
0

Я работал над приложением, которое должно иметь возможность компилировать по количеству и декомпилировать обратно в большой список. Вот какой-то код psuedo для того, что я пытаюсь создать в Javascript.Скомпилировать массив, включив количество без использования JQuery

псевдопользователей Код:

var array = [lorem, lorem, lorem, doler, doler, sit]; 
var orginizedArray = []; 
var unorginizedArray = []; 

function compileArray(orgianal, result){ 
    //code 
} 

compileArray(array, orginizedArray); 

console.log(organizedArray); 

function decompileArray(original, result){ 
    //code 
} 

decompileArray(orginizedArray, unorginizedArray); 

console.log(unorginizedArray); 

Console Log:

[4 lorem, 2 doler, 1 sit] 
[lorem, lorem, lorem, doler, doler, sit] 

Спасибо всем большое, кто может помочь мне понять это, как я ударил огромный блокпост пытается решить эту проблему.

+1

Что ваш вопрос? Каким должен быть ваш код? И что вы подразумеваете под * «скомпилировать массив» * ?? – UnholySheep

+0

компилировать или комбинировать? – MMK

+0

@UnholySheep. Вопрос в том, как сделать псевдокод в реальном Javascript-коде. Псевдокод также объясняет, что именно происходит и что ему нужно делать. –

ответ

1

Функция Array.prototype.reduce() может группировать массив, подобный этому.

var array = ["l", "l", "l", "d", "d", "s"]; 
var filtered = array.reduce(function(accumulator,current){ 
    for(var i = 0; i < accumulator.length; i++){ 
    if(accumulator[i].val == current) { 
    accumulator[i].count++; 
    return accumulator;} 
    } 
    accumulator[i] = {count:1, val:current}; 
    return accumulator; 
}, []); 
// filtered == [{count:3, val:"l"},{count:2, val:"d"},{count:1, val:"s"}] 

Вы можете перебрать этот массив в «декомпилировать» массив обратно в свои части

array = []; 
filtered.forEach(function(group) { 
    for(var i = 1; i <= group.count; i++) 
    { 
    array.push(group.val); 
    } 
}); 
// array == ["l", "l", "l", "d", "d", "s"] 
1
var array = ['lorem', 'lorem', 'lorem', 'doler', 'doler', 'sit']; 
    var organizedArray = []; 
    function compileArray() 
    { 
     var currentNum = 0; 
     for (var i = 0; i < array.length; i++) 
     { 
      currentNum++; 
      if (array[i] == array[i + 1]) 
      { 
       continue; 
      } 
      else 
      { 
       organizedArray.push(currentNum + ' ' + array[i]); 
       currentNum = 0; 
      } 
     } 
    } 
    compileArray(); 
    console.log(organizedArray); 
Смежные вопросы