2016-03-01 3 views
1

Я пытался разработать способ перемещения массива в начало массива.Найти массив и перенести его в начало многомерного массива

Вопрос меня в том, что я использую, как предложено в предыдущем вопросе:

channelArrStatus.unshift(channelArrStatus.pop()); 

Выпуск быть это только когда-либо удалить последнее значение и придерживаться его в начале.

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

Что должно произойти

Перед Find - [ '477', 'Звенящие']:

[ [ '487', 'RINGING' ], [ '477', 'RINGING' ],[ '488', 'RINGING' ] ] 

После:

[[ '477', 'RINGING' ],[ '487', 'RINGING' ],[ '488', 'RINGING' ] ] 

Что сейчас происходит!

До:

[ [ '487', 'RINGING' ], [ '477', 'RINGING' ],[ '488', 'RINGING' ] ] 

После:

[ [ '488', 'RINGING' ],[ '487', 'RINGING' ], [ '477', 'RINGING' ] ] 

В идеале, когда условие было выполнено оно должно двигаться, что массив в начале я сделал JSFiddle & код ниже в качестве примера :

var channelArrStatus = [ [ '477', 'RINGING' ], [ '487', 'NOT_INUSE' ], [ '488', 'RINGING' ]]; 
var state = "NOT_INUSE"; 

function testArray(){ 
if (state === "NOT_INUSE") { 
     var name = "487"; 
     var status = "INUSE" 
     var index = 0; 
     if (channelArrStatus.length === 0) { 
     var chanar = new Array(name, status); 
     channelArrStatus.push(chanar); 
     } else { 
     var found = false; 
     for (var i in channelArrStatus) { 
      var channelArrStatusElem = channelArrStatus[i]; 
      if (channelArrStatusElem[0] === name) { 
      index = i; 
      found = true; 
      if (channelArrStatus[index][1] !== "DND") { 
       setTimeout(function() { 
       channelArrStatus[index][1] = status; 
       if(channelArrStatus[index][1] === status){ 
       channelArrStatus.unshift(channelArrStatus.pop()); 
       document.write(channelArrStatus); 
       } 
       }, 4000); 
      } 
      } 
     } 
     } 
     } 
     } 

     testArray(); 

JSFiddle Example

Я знаю, почему он не работает, но я пробовал в основном все, чтобы переместить массив, который он находит в начале.

Любые идеи?

ответ

1

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

var input = ['aa', 'bb', 'cc', 'dd'], 
    index = input.indexOf('cc'); 
Array.prototype.unshift.apply(input, input.splice(index, 1)); 
1

Это предложение использует функцию для поиска и возвращает индекс для сращивания и unshifting.

var data = [['487', 'RINGING'], ['477', 'RINGING'], ['488', 'RINGING']], 
 
    index = function (array, search) { 
 
     var index = -1; 
 
     array.some(function (a, i) { 
 
      if (a.every(function (b, j) { return b === search[j]; })) { 
 
       index = i; 
 
       return true; 
 
      } 
 
     }); 
 
     return index; 
 
    }(data, ['477', 'RINGING']); 
 

 
~index && data.unshift(data.splice(index, 1)[0]); 
 
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

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