通过 underscore.js 删除数组元素

Removing element of array via 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]))

是否有另一种不需要库的解决方案?

让我们试试 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>

Is there another solution, one not requiring a library?

当然!您可以通过使用本机数组方法 filter 在没有库的情况下实现此目的。它接受一个函数作为参数,如果您想保留该元素,则 returns 为 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)

由于您的数组包含数组的引用,因此比较并不容易,但让我以更详细的方式解释一下。

例如你有那个数组:

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

该数组实际上只包含对其数组的引用,因此 "internal" 数组看起来像这样:

myArray = [ arrc@0x212414 , arrc@0x253211 ]

如果您现在尝试比较一个您解析为无下划线函数的数组,则该库只会比较这些引用(如果它们相等)。

因此,解决问题的更好方法可能是过滤数组并定义自己的函数来正确比较这些数组!

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