2017-05-13 169 views
0

我在我的前端使用了underscore.js,我想從二維數組中刪除一對值。我做錯了什麼,因爲下面的不行?通過underscore.js刪除數組的元素

如何我的元素添加到陣列:

google.maps.event.addListener(map, 'click', function (event) { 
    var latitude = event.latLng.lat() 
    var longitude = event.latLng.lng() 
    coordinatesForMarker.push([latitude, longitude]) 

如何我試圖刪除:

google.maps.event.addListener(marker, 'click', function (event) {             
    var latitude = event.latLng.lat() 
    var longitude = event.latLng.lng() 
    var newArray = _.without(coordinatesForMarker, ([latitude, longitude])) 

有另一種解決方案,一個不需要圖書館嗎?

+0

你實際分配'newArray'到'coordinatesForMarker'? – Originato

+0

不,我想分配更新的數組到newArray。 – konyv12

回答

1

讓我們嘗試用findWhere

var arr = [[ 
 
    1,2 
 
], [ 
 
    3, 
 
    3 
 
], [ 
 
    5, 
 
    6 
 
]]; 
 

 
//substract third 
 
arr = _.without(arr, _.findWhere(arr, [5, 6])); 
 
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

+0

工作很好,謝謝 – konyv12

1

有另一種解決方案,一個不需要圖書館嗎?

絕對!您可以通過使用本地數組方法filter來實現此功能。它接受一個函數作爲參數,如果您想保留該元素,則返回true;如果您想排除它,則返回false。

var coordinatesForMarker = [[41.482583, -82.687353], [52.986944, -1.882778], [35.706336, 139.753277]]; 
 

 
var latitude = 52.986944; 
 
var longitude = -1.882778; 
 

 
var newArray = coordinatesForMarker.filter(function (coord) { 
 
    return coord[0] !== latitude && coord[1] !== longitude; 
 
}); 
 

 
console.log(newArray)

+0

偉大的解決方案,謝謝! – konyv12

0

由於您的數組包含數組引用的比較不是那麼容易,但讓我解釋一下,在一個更詳細的方式。

例如你有一個數組:

myArray = [ [ 21, 222 ], [ 214, 314 ] ]

的數組實際上只包含自己的數組引用,這樣的「內部」陣列看起來是這樣的:

myArray = [ [email protected] , [email protected] ]

如果你現在嘗試比較一個你被解析成無下劃線函數的數組,那麼庫只是比較那些相同的引用。

因此,解決問題的更好方法可能是過濾數組並定義一個自己的函數,以便如何正確比較這些數組!

newArray = myArray.filter((element) => { element[0] !== event.lang && element[1] !== event.long })