通过underscore.js删除数组元素

时间:2017-05-13 08:41:28

标签: javascript 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]))

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

3 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

  

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

绝对!您可以使用本机数组方法filter在没有库的情况下实现此目的。它需要一个函数作为参数,如果你想保留元素,则返回true;如果你想要排除它,则返回false。

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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

例如,你有那个数组:

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

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

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

如果您现在尝试将解析后的数组与下划线的无函数进行比较,则只需将这些引用与它们相等即可进行比较。

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

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