2015-11-16 22 views
2

所以我現在有一個多維數組,我正試圖拼接的值與它的指標是剛剛被拆除的通道名稱,然後取出全陣列那個價值在哪裏。多維數組 - 拼接基礎上的indexOf值

但它沒有這樣做,它總是拼接的最後價值,我已經調試,以確保正確的值被傳遞,我想刪除,但.....依然無果,我沒有很多MD陣列的經驗,但迄今爲止這證明是一種痛苦。

我試圖擺弄索引,但總是結束相同或相反的結果。

下面是代碼,因爲它代表現在的拼接功能:

function stasisEnd(event, channel) { 
    console.log(util.format(
     'Channel %s just left our application', channel.name)); 
    console.log(channel.name); 

    //This is where the channels are removed from the array once they leave or are kicked from the channel. 
    var index = channelArr.indexOf(channel.name); 
    channelArr.splice(index, 1); 
    console.log(channelArr); 
    } 

這是該數組樣子裏面坐了3個數組:

[["1447667845.0","SIP/488-00000000"],["1447667858.4","SIP/477-00000002"],["1447667847.1","SIP/487-00000001"]] 

到目前爲止它總是刪除最後一個通道,我想刪除一個陣列,如果它的索引關掉channel.name值被刪除所以又名:

  1. SIP/477-00000002已被刪除。
  2. 根據該值刪除第二個數組。
  3. 可以繼續刪除基於channel.name的數組。

希望你們可以在此流下了小光。

編輯:我知道這對一個單一的正常數組工作。

回答

2

channelArr.indexOf(channel.name);僅當「channelArr」包含一個與channel.name相等的元素時才起作用,但「channelArr」不包含「strings」而是「arrays」,因此它不起作用。你必須cicle整個數組或者使用兩個簡單的陣列,而不是MD一個

嘗試這樣的事情

var index = 0; 
var foundIndex = false; 
for(var i in channelArr) { 
    var channelArrElem = channelArr[ i ]; 
    if(channelArrElem[ 1 ] == channel.name) { 
    index = i; 
    foundIndex = true; 
    } 
} 
if(foundIndex) { 
    channelArr.splice(index, 1); 
    console.log(channelArr); 
    updateSip(); 
} else { 
    // Something went very wrong and the channel wasn't there. 
} 
+0

這使得很多更有意義和作品一種享受,我本來用兩個簡單的陣列.. ...但由於我需要實現一些功能,我必須使用一個MD陣列,我認爲這將更有效,更容易管理。乾杯! – Studento919