如何在现代浏览器中实现lodash_.remove函数
How can I implement the lodash _.remove function in modern browsers?
我有使用lodash:的代码
_.remove(this.home.modal.data.subTopics, function (currentObject) {
return currentObject.subTopicId === subTopicToDelete;
});
有人能给我建议吗?我如何在没有lodash的情况下使用现代浏览器功能来做到这一点?
请注意,remove的输出进入另一个变量是可以的。
您可以使用Array#filter()
并否定filter子句:
this.home.modal.data.subTopics.filter(function (currentObject) {
return currentObject.subTopicId !== subTopicToDelete;
});
这将返回一个数组,其中subTopicId
不等于subTopicToDelete
。然后由您将其保存在变量或任何位置。
或者,如果你想用它创建一个方法,你可以这样做:
function remove(array, filterMethod) {
return array.filter(function(){
return !filterMethod.apply(this, arguments);
});
}
为什么不看看lodash的_.remove
源代码?
function remove(array, predicate, thisArg) {
var index = -1,
length = array ? array.length : 0,
result = [];
predicate = getCallback(predicate, thisArg, 3);
while (++index < length) {
var value = array[index];
if (predicate(value, index, array)) {
result.push(value);
splice.call(array, index--, 1);
length--;
}
}
return result;
}
(getCallback
调用在这里并不是很有趣,只需将其替换为一个谓词函数,该函数为给定的参数返回布尔值:value、index、array。显然,并非所有参数都需要提供,这毕竟是JavaScript!)
Lodash在适当的位置使用Array.prototype.splice
,将移除的元素推到结果数组上。然后,它使用--
将当前循环索引和保存的length
减少1,因为每次使用.splice
时,都会直接修改数组,例如:
var arr = ['a', 'b'];
arr.splice(0, 1);
arr[1] // undefined
在这种情况下CCD_ 10实际上与CCD_。你也可以做array.splice(index--, 1)
。
一种可能更简单/更容易理解的方法是从右边(for-)循环遍历数组,从array.length - 1
开始,到0
结束。然后,如果传递谓词函数,则拼接当前索引处的每个元素,并将该操作的结果值推送到结果数组上。在循环之后返回结果数组。
这也是一样的,因为如果从右侧开始删除元素,则其余循环元素的索引不会改变。也许lo-dash的代码有性能优势,但我不能告诉你。
您可以调整Array.prototype
以满足您的需求。有些人不喜欢这种方法,但有时它会很有用。在这个例子中,我传入密钥和我想通过以下方式修改数组的值:
if (!Array.prototype.remove) {
Array.prototype.remove = function (key, value) {
return this.filter(function (el) {
return el[key] !== value;
});
}
}
data.remove('name', 'dan');
DEMO
- 如何使用动画实现纸张推车
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 客户端服务器REST API captcha实现
- 如何实现此布局
- Lodash从集合创建集合
- Meteor忘记了密码的实现
- 使用Native Sockets在Android中实现WebSockets
- 在样板文件中实现Ajax
- Lodash 从值数组中查找数组中的值
- instanceof是如何在JavaScript中实现的
- 如何正确实现Jquery多选小部件
- 实现一个建立在google.com之上的自定义搜索引擎
- 多个组件是如何实现的
- window.location使用jquery mobile实现chrome跳转
- 如何在OpenERP中实现网络摄像头
- 可以't使用Lodash实现JSON结构
- 如何在lodash中实现嵌套数组的并集
- 实现下面场景的lodash组合是什么?
- Lodash实现返回值=== 0 ?取值范围:0
- Lodash和map / filter / keys -更好的实现