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