基本 javascript 算法工具箱:初学者工具包
基本 javascript 算法工具箱:初学者工具包
原文:https://medium.com/hackernoon/basic-javascript-algorithms-toolbox-starter-kit-dc2af3ceebad

TL;博士:这里有一个经常有用的 javascript 快速编写算法的列表。
来自 ruby 背景的我,在学习 javascript 时经历了相当多的挫折。很多基本的方法,比如说merge、flatten或者uniq,在我看来都是缺失的。
然后我发现了 lodash 这很酷…直到我发现在运行任何更新时,你必须非常仔细地看看,冒着以非常不可思议的方式破坏东西的风险(当然这发生了;我让您想象一下,在 lodash 改变了一个方法之后,调试您的代码是一件多么愉快的事情,这个方法现在几乎(但不完全)与以前完全不同。如果你甚至没有意识到 lodash 在第一时间被更新,那就加分了)。
几年后,由于新的 ES6 标准,事情看起来更容易了,我很少使用 lodash 或任何其他库来实现基本的算法。下面是我在编写代码时经常遇到的一些问题。
免责声明:我不会假装在效率或算法复杂度上打败 lodash。此外,lodash 肯定是一个令人敬畏的项目。下面的例子只是简单、易于编写的代码片段,对于足够简单的情况,它们可以快速工作;我们并不总是需要大枪。
哦,还有,下面所有的代码都遵守不变性原则。我们从不改变初始对象,而是返回一个具有所需属性的新对象。
希望它也能帮助你!
Uniq 数组
这里的想法是从我们的值创建一个Set,然后将它转换回一个数组(如果需要的话):
unify an array, two ways are possible
在转换回数组之前,记住Set本身有一些有用的工具,例如size或has。
通过属性更新数组对象
这里我们更新数组中有id: 3的对象。
Of course, the “initial” const is remained untouched
通过属性从数组中移除对象
让我们从数组中移除带有id === 3的对象:
Again, initial stays untouched.
从对象中移除键
您可以反过来使用非规范化赋值:
将一组对象合并在一起
使用这段代码,我们可以将对象合并在一起,或者根据它们的属性更新它们:
reduce and spread operators work really nicely together
变平
on-level flattening of an array
来自巴黎
I like [key, value] denormalized assignment a lot :)
减去两组
Less frequent but still useful
结论
好了,现在就这样。不要犹豫,给我发更多的例子,甚至要求新的,如果你觉得我忘记了一些有用的算法!随着时间的推移,我很可能会更新这个列表:)