let arr1 = [1, 2];
let arr2 = [3, 4];
// concat
arr1 = arr1.concat(arr2);
//
arr1 = [...arr1, ...arr2];
//
arr1.push(...arr2);
which is better and why? Performance?
let arr1 = [1, 2];
let arr2 = [3, 4];
// concat
arr1 = arr1.concat(arr2);
//
arr1 = [...arr1, ...arr2];
//
arr1.push(...arr2);
which is better and why? Performance?
which one to use or according to your actual needs
concat
is available when es5
. The advantage is that compatibility
is high, and there is no need to translate
.
is a new syntax of es6
. simplifies
writing, and the code looks more concise and intuitive, but in fact, it only does encapsulation
, and the underlying layer is still using the original method. The following is the result of babel translation
arr1 = [...arr1, ...arr2];
function _toConsumableArray(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = Array(arr.length); i < arr.length; iPP) { arr2[i] = arr[i]; } return arr2;
} else { return Array.from(arr); }
}
arr1 = [].concat(_toConsumableArray(arr1), arr2);
arr1.push(...arr2);
arr1.push.apply(arr1, arr2);
Let's take a look at the time taken by the three writing methods to deal with different amounts of data (the data is 10100 respectively) unit: ten thousand
num:10000
s1: 0.01813671875ms
s2: 0.1808984375ms
s3: 0.078857421875ms
num:100000
s1: 0.8310546875ms
s2: 10.428955078125ms
s3: 8.025146484375ms
num:1000000
s1: 11.42724609375ms
s2: 83.867919921875ms
s3: Maximum call stack size exceeded
Summary:
concat
performance
there is no significant difference among the three when the amount of data is extremely small
when there is a certain amount of data, the performance of concat
is far ahead of arr1 = [.arr1, .arr2]
and arr1.push (.arr2)
when the data is too large, the third method will lead to heap because of the characteristics of apply
.
first take a look at the differences between the three ways you mentioned:
this difference exists in two environments:
you use babel to convert es5 to look at the extension operator
[.arr1, .arr2] = > [] .concat (arr1, arr2)
arr1.push (.arr2) = > arr1.push.apply (arr1, arr2)
in the case of this difference, you can see the benefits of
: the extension operator looks more intuitive, more readable, and calls less api, and is concise.
performance: you may need to make an evaluation, but I didn't do this,
benefit: everyone uses this to improve your image in other front ends. You are a person who keeps pace with the times and will not be eliminated.
performance: find an environment that supports this syntax and test it, such as node environment
in addition, you can also judge the performance by some common comparison methods.
for example, you can evaluate it by connecting 100 million elements to an array and looking at the time spent in different ways;
you can do this yourself.
creates a new array. (no matter how the js engine optimizes the extension operator) the performance will definitely be poor.
the third way of writing is because push is recursive, so the performance is also poor (errors will be reported if there is too much data)
Previous: Android layout, how can this protruding dot be added to my layout?
Next: How to achieve smooth scrolling of webApp in the case of nested routing components
The horizontal coordinates of echarts are not specifically marked, and the X coordinates do not have a grid to indicate. Here is a figure that specifies . js * * createChartSix() { this.$http .get(this.$api.dataChart) .then(rsp => { ...
sincerely ask for advice: < hr > I want to use node as the background to build a video streaming server. The front end is similar to Youku VOD. It can record the playback node function, and load the progress bar at any point (starting from the c...
I need to implement in a chained promise function, any function error in the middle terminates the program, and can catch the error function, and then perform different operations according to different error functions. How can the following code be imp...
I would like to ask what is wrong with this code. Thank you for your answers. ...
is doing a question on Niuke.com. I encounter a problem: to achieve the function callIt, after the call meets the following conditions 1, the returned result is the result after calling fn 2, and the call parameter of fn is all the parameters after th...
A timing examination system is triggered if the click event is triggered within 5 seconds, and if it is not triggered, the system marks the correct answer at the end of the countdown. How to implement ...
description: a regular match is given to the content of an input box, and the matching content is the product activation code. looks like this: "0C31-0B81-BB32-3094-0C31-0B81-BB32-3094 " Code: $( -sharplicenseCode ).keyup(function () { le...
1. The custom event triggers the click event of .cpcstartrefresh, but triggers 2 click events each time 2. The code is as follows: window.onmessage = function (e) { create an event object, var myEvent = document.createEvent( Event ); m...
I configured the MIME type of the file with the amr suffix in the apache configuration as application ms-download, Why it is a garbled page when opening a file in amr format using window.open in chrome, while a file in amr format can be successfully dow...
I got a set of data, which is to choose the type of question. How can I tell if I have chosen the right one answera: "Olympic Games " answerb: "Asian Games " answerc: "Paralympic Games " answerd: "University Games " id: "1772 " question: "f...
read a number, such as 521 change this number to 0521 but put it into four div separately, how to realize it? 0 < div > 5 < div > 2 < div > 1 < div > ...
react projects cannot save store? using redux, data index.js ReactDOM.render( <Provider store={store}> <Router > < Provider>, document.getElementById( root )) registerServiceWorker() actions export const SET_USER = ...
how to find all the NA characters in a HMLT page and replace it with "and invalid " with native JS ...
...
suppose there are only a.js and b.js (only two js and nothing else) b.js export A variable is used for a.js can you directly use import and export without using packaging and compilation tools such as webpack or babel can it be achieved with the h...
do the gods have plug-ins for uploading attachments in the mobile version that can also be uploaded more than one? ...
what does the code circled in the following picture mean? ...
I look at a html ui project with items such as: var apiserver = window[ apiserver ]; url = apiserver + "filterUrlController getUrlData"; I searched the whole project and couldn t find the value of window [ apiserver ]. How do you un...
In the vue-cli project, I directly introduced the particls library into index.html, and the related files are placed in the static directory . <div id="particles-js">< div> <script type="text javascript" src="s...
How does the code return only the result after the last asynchronous operation in the for loop is completed as shown in the figure? Please stop by and give me a hand. ...