2016-03-01 114 views
1

我一直在試圖開發一種將數組移動到數組開頭的方法。查找數組並將其移動到Multidimesional數組的開頭

問題時遇到的是,我用的是作爲前一個問題建議:

channelArrStatus.unshift(channelArrStatus.pop()); 

問題是它僅會刪除最後一個值,並在一開始堅持下去。

但是,如果每次我需要它的值是不同的,如果條件滿足,然後將符合條件的數組移動到數組的開始。

我需要發生

找不到之前 - [ '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

使用unshiftsplice

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>');

相關問題