使用具有多维数组的unshift函数

时间:2016-02-29 17:47:42

标签: javascript arrays multidimensional-array

我一直在尝试使用带有MD数组的unshift函数,但我不能让它相应地工作。

我正在使用shift okay,它可以像预期的那样完成所需的操作但不会移动。

以下是我正在使用的数组:

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

当我尝试对其进行非移位时,它会显示以下内容:

[ [ '487', 'RINGING' ], [ '477', 'RINGING' ], 2 ]

我只需将477数组移动到开头就像这样:

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

我正在使用的代码:

var channelArrStatus = [ [ '477', 'RINGING' ], [ '487', 'RINGING' ]];

function monitor_channel(event, channel) {
if (event.device_state['state'] === "RINGING") {
      var name = "User_487";
      var status = "NOT_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") {
              channelArrStatus.push(channelArrStatus.unshift());
              setTimeout(function () {
                channelArrStatus[index][1] = status;
              }, 10000);
            }
          }   
        }
      }
    }

我无法通过unshift将数组移动到数组的开头作为高亮显示。

有什么建议吗?

编辑:JSFiddle

2 个答案:

答案 0 :(得分:0)

电话.unshift()不包含任何内容并返回数组的长度 - 2在您的情况下 - 这就是您推送的价值。

你要么

channelArrStatus.push(channelArrStatus.shift()); // no un-

channelArrStatus.unshift(channelArrStatus.pop());

那就是说,你应该use literal notation instead of the Array constructoravoid for in enumerations on arrays

答案 1 :(得分:0)

在这一行

 channelArrStatus.push(channelArrStatus.unshift());

您正在将数组的长度添加到数组的 end 。 如果要将元素添加到数组的开头,只需调用unshift

channelArrStatus.unshift(element);