我想知道为这 3 个函数 [map(),reduce(),filter() 包含 Lodash 是否更好] 或者只是使用它们的 ES6 版本。
我更喜欢使用 Lodash 函数,它对我的用例来说更简单一些。但是,我知道使用 ES6 函数可能会带来性能优势。
还想知道 Lodash 是否比 ES6 更向后兼容?
关于如何测试我的实现性能的建议?
关于继续使用Lodash还是使用ES6的建议?
最佳答案
Lodash 是一个很好的工具,如果你有更复杂的算法,它更易读等。它内置了很多任务的函数,这些任务在原生 ES6 中实现起来并不那么容易,它真的很方便并且可以让你免于头痛。但是对于你提到的简单任务,我会使用 ES6。正如@Mayday 在评论中所说,这是 future 。
如果你只为这些任务使用 Lodash,我建议你摆脱它,这意味着你少了一个依赖,这几乎总是一件好事(用户不必下载 lodash,因为原生 map,reduce ,过滤器在浏览器中实现)。是的,现在你可能需要使用 bundler 或翻译器来使你的代码与 es5 兼容,但这是一种开发依赖性,不会在生产中出现,而且它会在一段时间内得到支持,你甚至不会需要这些额外的步骤。
要测试您的代码,请参阅以下答案: How do you performance test JavaScript code?
Google Chrome 和 Firefox 也有非常好的分析器:https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/reference#record
如果你想比较原生函数和 lodash 函数,我建议你运行在两者中实现的相同函数几百万次并测量开始和结束之间的时间 (console.time https://developer.mozilla.org/en-US/docs/Web/API/Console/time),我认为你也应该对它们进行一些测量,因为结果可能取决于很多其他因素。我想我也会避免 for 循环,因为它们经过高度优化并且可能会扭曲结果。
编辑
正如@TamasHegedus 在评论中指出的那样,这些函数在 ES5 规范中,因此您甚至不需要打包器或翻译器,它会在 native 运行。
关于javascript - Lodash 与 JavaScript 内置的 map、reduce、filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44353424/
是否有可能:before_filter:authenticate_user!||:authenticate_admin! 最佳答案 before_filter:do_authenticationdefdo_authenticationauthenticate_user!||authenticate_admin!end 关于ruby-on-rails-before_filter运行多个方法,我们在StackOverflow上找到一个类似的问题: https://
我已经开始了:defsplit_array(array,size)index=0results=[]ifsize>0whileindex如果我在[1,2,3,4,5,6]上运行它,比如split_array([1,2,3,4,5,6],3)它将产生这个数组:[[1,2,3],[4,5,6]]。在Ruby1.8.7中是否已经有可用的东西可以做到这一点? 最佳答案 [1,2,3,4,5,6].each_slice(3).to_a#=>[[1,2,3],[4,5,6]]对于1.8.6:require'enumerator'[1,2,3,4
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我需要从json记录中获取一些值并像下面这样提取curr_json_doc['title']['genre'].map{|s|s['name']}.join(',')但对于某些记录,curr_json_doc['title']['genre']可以为空。所以我想对map和join()使用try函数。我试过如下curr_json_doc['title']['genre'].try(:map,{|s|s['name']}).try(:join,(','))但是没用。 最佳答案 你没有正确传递block。block被传递给参数括号外的方法
如果我想要“00001”而不是“1”,除了我自己写填零方法之外,有没有内置的方法可以帮助我为整数填零? 最佳答案 puts"%05d"%1#00001参见:String::%,Kernel::sprintf这是正在发生的事情。%左侧的"%05d"是C风格的格式说明符。%右边的变量就是要格式化的东西。格式说明符可以像这样解码:%-格式说明符的开头0-用前导零填充5-长度为5个字符d-被格式化的是一个整数如果你要格式化多个东西,你会把它们放在一个数组中:"%d-%s"%[1,"One"]#=>1-one
Enumerable#each和Enumerable#map的区别在于返回的是接收者还是映射后的结果。回到接收者是微不足道的,你通常不需要在each之后继续一个方法链,比如each{...}.another_method(我可能没见过这样的案例。即使你想回到接收者那里,你也可以通过tap来实现)。所以我认为所有或者大部分使用Enumerable#each的情况都可以用Enumerable#map代替。我错了吗?如果我是对的,each的目的是什么?map是否比each慢?编辑:我知道当您对返回值不感兴趣时使用each是一种常见的做法。我对这种做法是否存在不感兴趣,但感兴趣的是,除了从
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
map遍历数组是否比each更快?两者有速度差异吗?mapresult=arr.map{|a|a+2}每个result=[]arr.eachdo|a|result.push(a+2)end 最佳答案 我认为是的。我试过这个测试require"benchmark"n=10000arr=Array.new(10000,1)Benchmark.bmdo|x|#Mapx.reportdon.timesdoresult=arr.map{|a|a+2}endend#Eachx.reportdon.timesdoresult=[]arr.each
我想念Ruby中的Hash方法来仅转换/映射散列值。h={1=>[9,2,3,4],2=>[6],3=>[5,7,1]}h.map_values{|v|v.size}#=>{1=>4,2=>1,3=>3}你如何在Ruby中归档它?更新:我正在寻找map_values()的实现。#moreexamplesh.map_values{|v|v.reduce(0,:+)}#=>{1=>18,2=>6,3=>13}h.map_values(&:min)#=>{1=>2,2=>6,3=>1} 最佳答案 Ruby2.4引入了方法Hash#tran
假设我有一个函数defodd_or_evennifn%2==0return:evenelsereturn:oddendend我有一个简单的可枚举数组simple=[1,2,3,4,5]然后我用我的函数在map中运行它,使用一个do-endblock:simple.mapdo|n|odd_or_even(n)end#=>[:odd,:even,:odd,:even,:odd]如果不首先定义函数,我怎么能做到这一点?例如,#doesnotworksimple.mapdo|n|ifn%2==0return:evenelsereturn:oddendend#Desiredresult:#=>[