Javascript 比lodash链条更好、性能更好

Javascript 比lodash链条更好、性能更好,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,我在一些论坛上读到,为了更好的性能和代码的可读性,应该尽可能避免使用lodash链。所以,有没有一种方法可以在集合上使用本机javascript函数来替换此代码 _(userCollection).chain() .map('name') .compact() .uniq() .value(); 像下面这样的咆哮,但我不确定这样写是否有任何附加价值 _.uniq(_.compact(userCollection.map('name

我在一些论坛上读到,为了更好的性能和代码的可读性,应该尽可能避免使用lodash链。所以,有没有一种方法可以在集合上使用本机javascript函数来替换此代码

_(userCollection).chain()
        .map('name')
        .compact()
        .uniq()
        .value();
像下面这样的咆哮,但我不确定这样写是否有任何附加价值

_.uniq(_.compact(userCollection.map('name')))
您可以使用运行一系列方法:

const{flow,partiOK:pr,map,compact,uniq}=;
const getUniqeNames=flow(
pr(地图,“名称”),
契约
uniq
);
const arr=[{name:'John'},{},{name:'Smith'},{},{name:'John'},{name:'Smith'}]
const result=getUniqeNames(arr);
控制台日志(结果)
您可以使用来运行一系列方法:

const{flow,partiOK:pr,map,compact,uniq}=;
const getUniqeNames=flow(
pr(地图,“名称”),
契约
uniq
);
const arr=[{name:'John'},{},{name:'Smith'},{},{name:'John'},{name:'Smith'}]
const result=getUniqeNames(arr);
控制台日志(结果)

我相信这就是你要找的。不需要洛达斯

lodash.map
可以更改为
Array.prototype.map

lodash.compact
可以更改为
Array.prototype.filter

lodash.uniq
可以更改为
Set
构造函数,也可以选择再次转换为数组

const用户=[
{name:'我'},
{name:'其他人'},
{name:'其他人'},
{名称:''},
];
const uniqueNames=Array.from(新集合(用户
.map(user=>user.name)
.filter(name=>name));

控制台日志(uniqueNames)我相信这就是你要找的。不需要洛达斯

lodash.map
可以更改为
Array.prototype.map

lodash.compact
可以更改为
Array.prototype.filter

lodash.uniq
可以更改为
Set
构造函数,也可以选择再次转换为数组

const用户=[
{name:'我'},
{name:'其他人'},
{name:'其他人'},
{名称:''},
];
const uniqueNames=Array.from(新集合(用户
.map(user=>user.name)
.filter(name=>name));

控制台日志(uniqueNames)指出这一点是一本很好的读物。简单的回答是切换到lodash/fp,并使用诸如
flow
/
flowRight
之类的结构来代替链。这是一篇精彩的文章,但我不清楚OP的说法:“我在一些论坛上读到,为了更好的性能和代码可读性,应该尽可能避免使用lodash链。”这与那篇文章有关。本文讨论的是“如何获得2倍的构建时性能提升和1.5倍的包大小缩减”,而不是“运行时性能提升”。这篇文章还讨论了为什么/如何
.chain
提高可读性,这也是人们使用它的原因。@gforce301:这篇文章的主要目的是展示
chain
的问题,并推广一种至少同样可读的替代方法,也许更容易:
flow
。这与Ramda(我是其作者)提倡的风格相同,在函数式语言中也很常见。提出这一点是一本很好的读物。简单的回答是切换到lodash/fp,并使用诸如
flow
/
flowRight
之类的结构来代替链。这是一篇精彩的文章,但我不清楚OP的说法:“我在一些论坛上读到,为了更好的性能和代码可读性,应该尽可能避免使用lodash链。”这与那篇文章有关。本文讨论的是“如何获得2倍的构建时性能提升和1.5倍的包大小缩减”,而不是“运行时性能提升”。这篇文章还讨论了为什么/如何
.chain
提高可读性,这也是人们使用它的原因。@gforce301:这篇文章的主要目的是展示
chain
的问题,并推广一种至少同样可读的替代方法,也许更容易:
flow
。这与Ramda(我是其作者)提倡的风格相同,在函数式语言中也很常见。
.filter(Boolean)
可能比
.filter(name=>name)
更简洁。答案可以提供完整性的基准,因为问题涉及性能。一般来说,我希望Lodash的性能更好。我不清楚问题是关于特定的代码还是技术。这对于特定的代码来说很好,但是有很多lodash函数没有简单的本机对应项。@estus:我所看到的大多数与
chain
相对的性能原因都是关于包大小,而不是执行速度。@ScottSauyet这是一个带有示例代码的一般性问题。但我相信,谈到性能,它只对前端有意义,因为后端一切都是构建的
。过滤器(布尔值)
可能比
。过滤器(名称=>name)
更干净。答案可以提供完整性的基准,因为这个问题涉及性能。一般来说,我希望Lodash的性能更好。我不清楚问题是关于特定的代码还是技术。这对于特定的代码来说很好,但是有很多lodash函数没有简单的本机对应项。@estus:我所看到的大多数与
chain
相对的性能原因都是关于包大小,而不是执行速度。@ScottSauyet这是一个带有示例代码的一般性问题。但我相信,就性能而言,它只对前端有意义,对后端来说,一切都是构建好的