underscore.js 的替代品
Posted
技术标签:
【中文标题】underscore.js 的替代品【英文标题】:Alternatives to underscore.js 【发布时间】:2012-02-11 15:30:51 【问题描述】:我正在寻找一个操作对象数组的 javascript 库,主要用于过滤、排序和分组/计数。
似乎 underscore.js 符合要求,但我有兴趣探索其他选项。 Underscore 有 60 多个函数,而我只需要几个。
例如,我希望某些数据表库包含这些功能,但我不知道去哪里找。
【问题讨论】:
您可以随时尝试从source 中删除您需要的少数功能/方法 根据 Raynos 的回答,我实际上在想我应该从 ES5 垫片中去掉我需要的东西。 【参考方案1】:您可能需要查看以下两个库:
wu.js functional【讨论】:
谢谢。显然第二个只适用于数字数组,而我需要一个对象数组的解决方案。【参考方案2】:它被称为 JavaScript arr.filter
、arr.sort
、arr.length
。
您可以对数组应用任何数组方法,流行的有filter
、map
和reduce
,您可以通过组合它们来构建更复杂的操作。
如果你想迭代对象使用
Object.keys(o).forEach(function (key)
var val = o[key];
...
);
如果你生活在 ES3 世界中,下划线很有用,但 ES5 有你需要的一切,下划线所做的只是在它上面添加膨胀。
【讨论】:
arr.length
?我没有给你程序中的海盗数量吗? ;)
我生活在一个 IE 8 甚至 IE 7 仍然流行的世界...kangax.github.com/es5-compat-table
谢谢!绝对是我想探索的一个选择。
@Raynos 如果我需要像 array_diff/array_intersect 这样的函数,你建议怎么做?构建一些自定义函数或使用库?
@danip require("interset/intersect")
require("difflet")
。有很多模块可以很好地完成单个任务。找到它们,使用它们。【参考方案3】:
这里还有几个
https://github.com/ded/valentine http://sugarjs.com/【讨论】:
【参考方案4】:我知道这是旧的但你看过lodash 吗?来自网站:
Underscore.js 的直接替换*。 [...]
自定义构建可以轻松创建仅包含您需要的方法的 Lo-Dash 轻量级版本。最重要的是,我们会为您处理所有方法依赖和别名映射。
【讨论】:
Lo-Dash 比 Underscore 有什么优势?下划线已经很小了。 @blaster:Lo-Dash 的优化程度更高。您可以在这里看到一些不错的可视化基准测试结果:dtao.github.io/lazy.js【参考方案5】:看看lazy.js (http://dtao.github.io/lazy.js/),类似于 underscore.js,但由于延迟评估而显着提高了性能
【讨论】:
这个库只有在你想将多个操作链接在一起时才能获得性能。执行单个map()
或 reduce()
将看到零性能增益(在某些情况下它实际上会更慢,尤其是与 lodash 相比)。但是,在处理非常大的数据集时,它的性能提升确实非常显着。
@idbehold:这取决于环境和数组的大小,因为不同的 JavaScript 引擎的行为非常不同。例如,在 Chrome 上,即使是小型数组并且没有链接 Lazy.js 也优于 Lo-Dash。但是在 Firefox 上,Lo-Dash 在这种情况下更快是对的。【参考方案6】:
lowscore 是一个非常轻量级的下划线:
你可以require
只使用你需要的功能
可以将 JS 大小减少大约 15k 缩小,或大约 50k 非缩小。
【讨论】:
以上是关于underscore.js 的替代品的主要内容,如果未能解决你的问题,请参考以下文章