【发布时间】:2021-07-02 14:31:41
【问题描述】:
我有一个关于性能的问题。
假设我有大量名为records 的对象。
我的目标是创建一个集合(确保我有不同的值),其中包含来自records 的记录的值value
满足一定条件 - if(rec.otherValue === 'something specific')。
我有两种可能的方法可以产生预期的结果:
选项 1:
const set = new Set();
records.foreach(rec => {
if(rec.otherValue === 'something specific'){
set.add(rec.value);
}
});
第一个选项是直截了当的。如果满足特定条件,我会遍历所有记录并将所需的值添加到 Set。
选项 2:
const set = new Set();
const filteredRecords = records.filter(rec => rec.otherValue === 'something specific');
filteredRecords.foreach(rec => {
set.add(rec.value);
});
第二个选项首先过滤大量 records 数组以获得更具体的对象数组(从数百条记录到少于 10 条),然后将所需的值添加到 Set。
这两个选项产生完全相同的结果。 我的问题是:哪一个是性能最好的?我的目标是使功能尽可能快。 如果还有第三种更快的选择,请分享。
【问题讨论】:
-
您听说过大 O 符号吗?在您的情况下,复杂性始终为 O(n)。而且性能是一样的。第一种方法使其更具可读性:) 请在此处查看stackoverflow.com/questions/16917958/…
-
@hurricane 是的,我很清楚 O 表示法,我也知道它会给我 O(n) 的时间复杂度。但我的问题不是关于时间复杂度——而是关于性能。我敢肯定 js 的开发者在性能方面以最好的方式开发了这两个功能。这并不意味着尽管它们具有相同的时间复杂度,但它们都具有相同的速度/性能/资源分配
-
Which one is the best performance-wise?它们是等价的,因为它们具有相同的时间复杂度。差异将以纳秒为单位。
标签: javascript arrays performance