We have a simple interview question…how to duplicate an array. I think there at least 2 answers:
forloopconcat
and my buddy at work said: ‘use the spread operator’, which in my opinion isn’t very readable and got me thinking…is that es6 construct efficient?
Here are some results of the running the following code using 3 different node versions.
const concat = []
for (let i = 0; i < 1000; i++) {
concat.push(i)
}
let a1 = []
console.time("concat")
for (let i = 0; i < 1000; i++) {
a1 = concat.concat(concat)
}
console.timeEnd("concat")
let spread = []
for (let i = 0; i < 1000; i++) {
spread.push(i)
}
let a2 = []
console.time("spread")
for (let i = 0; i < 1000; i++) {
a2 = [...spread, ...spread]
}
console.timeEnd("spread")node 12:
concat: 5.016ms
spread: 9.849msnode 10:
concat: 4.721ms
spread: 16.884msnode 8:
concat: 4.257ms
spread: 79.438msWell, it looks like v8 definitely improved on node 12, but still not as good as concat.
So I definitely wouldn’t recommend using the spread operator until it can get as fast as Array concat.
Btw, if a candidate uses a for loop for the interview answer, then I would be a little disappointed and ask for a better solution.