2016-03-01 73 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>');

相关问题