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.filterarr.sortarr.length

您可以对数组应用任何数组方法,流行的有filtermapreduce,您可以通过组合它们来构建更复杂的操作。

如果你想迭代对象使用

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 的替代品的主要内容,如果未能解决你的问题,请参考以下文章

underscore.js源码研究

underscore.js源码解析

underscore.js

underscore.js 分析 第四天

underscore.js源码解析

Underscore.js入门