我正在使用以下函数:
remove: function (arr, property, num) {
for (var i in arr) {
if (arr[i][property] == num)
arr.splice(i, 1);
}
},
该功能有效,但现在我的应用程序使用 _lodash 库并使用所有现代 IE8 及更高版本的浏览器,我想知道是否有更有效的方法可以使用 _lodash 或其他一些浏览器本机方法完成相同的功能。
我不相信 lodash 有什么可以帮助你的。它有 _.remove
,但这会返回一个新数组,并且您正在修改一个现有数组。
请注意,您现有的 remove
函数有一个错误:如果数组有两个连续的匹配条目,它将失败(留下匹配的条目)。(演示)此外,for-in 不是用于循环遍历数组索引,而是枚举属性名称。(更多内容在此博客文章和此 SO 答案中。要正确执行此操作,请向后循环;下面是修复它的最小更改:
remove: function (arr, property, num) {
for (var i = arr.length - 1; i >= 0; --i) {
if (arr[i][property] == num)
arr.splice(i, 1);
}
},
以下是操作中的更改: http://jsbin.com/OTiZInU/2
有一些 lodash 函数可以帮助您解决此问题,例如过滤和删除:
arr = _.remove(arr,function(row){return row[property] == num });
另请注意,lodash 方法不会更改您传入的原始数组(与您的示例不同),因此您需要执行 arr = ....