2017-05-30 116 views
0

我[2016,2017,2018,2019]刪除範圍

的陣列我有一個範圍fromValue 2017 toValue 2017

因此所得陣列應採用[2017]由於我需要刪除fromValue和toValue之間的任何範圍。

我已經寫了下面的代碼這是隻有消除2016和2018,但不是2019年

哪些錯誤我在做什麼,有沒有什麼辦法尤爲明顯要做到這一點?

gNodeIDs.forEach(function (item) {    
    alert("Before if" + item); 
    if (item >= fromValue) { 
     if (item <= toValue) {       
     } 
     else 
     { 
      alert("removing" + item); 
      var index = test.indexOf(item); 
      if (index >= 0) { 
       test.splice(index, 1); 
      } 
     } 
    } 
    else { 
     alert("removing" + item); 
     var index = test.indexOf(item); 
     if (index >= 0) { 
      test.splice(index, 1); 
     } 

    } 
}); 
+0

怎麼樣?使用過濾器? – SmartestVEGA

回答

2

使用Array.prototype.filter來實現這一目標:

var result = gNodeIDs.filter(function(item) { return item >= fromValue && item <= toValue }); 

result數組包含所有匹配的項目

+1

可能不是問題,但值得一提的是這是在JavaScript 1.6中添加的。但是,如果您擔心它有一個polyfill https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter?v=control – disrvptor

+0

感謝它的工作! ! – SmartestVEGA

+0

@SmartestVEGA很高興幫助,請不要忘記接受答案;) – hmnzr

1

使用Array.prototype.filter是正確的答案,但值得注意你不使用forEach功能正常。根據Array.prototype.forEach

forEach()處理的元素範圍在第一次調用回調之前設置。調用forEach()之後追加到數組的元素將不會被回調訪問。如果數組中現有元素的值發生更改,則傳遞給回調的值將是forEach()訪問它們時的值;被訪問之前被刪除的元素不會被訪問。如果已經訪問的元素在迭代過程中被移除(例如使用shift()),則後面的元素將被跳過 - 參見下面的示例。

如果你想使用forEach功能,那麼你應該使用相同的陣列的2份,先進行迭代和第二去除。