Spread & Rest Operator
- Form a new array from an existing array with less character noise.
- Spread extracts the elements as values. Its an Immutable function.
- [] is the way to write new arrays. Hence, spread doesn't alter the original array.
- Spread works on all iterables, not just on arrays.
- Iterables: String, Array, Map, Set i.e mostly builtin data structures except object data-type.
- Difference from Destructuring: Extracts all the elements from an array, and doesn't create new variables, only used at places which require values CSVs.
- USED when we are building an array, or when we pass values into a function.
const nums = [5,6,7]; const newNums = [1,2, nums[0],nums[1],nums[2]]; console.log(newNums); // [ 1, 2, 5, 6, 7 ] is reduced to const nums = [5,6,7]; const newNums = [1,2, ...nums]; console.log(newNums); // [ 1, 2, 5, 6, 7 ] console.log(...newNums); // 1 2 5 6 7
1. Merge two arrays together
const arr1 = [1,2,3,4,5]; const arr2 = [6,7,8,9]; let nums = [...arr1,...arr2]; nums; // [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] const firstname = "Peter"; const fullName = [...firstname,' ',"P."]; fullName; // [ 'P', 'e', 't', 'e', 'r', ' ', 'P.' ] console.log(...firstname); // 'P' 'e' 't' 'e' 'r'
- SOURCE of ERROR: Spread operator doesn't work inside a template string as template string doesn't expect multiple values inside it.
2. Creating Shallow Copies of arrays
const girl = { name: 'Melania', friends: ['Alina', 'Alice', 'Ayesha', 'Anamika', 'Anaya'] }; const frnz = [...girl.friends]; console.log(frnz); // [ 'Alina', 'Alice', 'Ayesha', 'Anamika', 'Anaya' ] console.log(girl.friends); // [ 'Alina', 'Alice', 'Ayesha', 'Anamika', 'Anaya' ]
Spread works on objects also even though they are not iterables.
let male = { "firstName": "Gangadhar", "lastName": "Shaktimaan" } let female = { "firstName": "Geeta", "lastName": "Vishwas" } let x = {...male, born: 1950}; let y = {...female, born: 1940}; x; // { firstName: 'Gangadhar', lastName: 'Shaktimaan', born: 1950 } y; // { firstName: 'Geeta', lastName: 'Vishwas', born: 1940 }``` ## Shallow Copy of objects: let male = { "firstName": "Gangadhar", "lastName": "Shaktimaan" } let character = {...male, firstName: 'Wonderwoman'}; male; // { firstName: 'Gangadhar', lastName: 'Shaktimaan' } character; // { firstName: 'Wonderwoman', lastName: 'Shaktimaan' } - First name for character object is changed although it was extracted from male object
Rest Pattern & Rest Parameters:
- Rest does the opposite of spread but has a same syntax like spread.
- Spread was used to build new arrays or pass values to a fn. in both cases, spread was used to expand elements in both cases.
- Rest uses the same syntax but to condense those values into a single
- Spread is for unpacking elements from an array, rest is for packing elements into an array. ```
Difference in syntax of spread and rest operator:
Spread operator => ... are used on RHS of assignment operator.
const nums = [9,4, ...[2,7,1]];
Rest operator => ... will be on the LHS of assignment operator with destructuring
const [x,y,...z] = [9,4, 2,7,1];
## Rest syntax collects all the elements after the last elements into an array. Doesn't include any skipped elements. - Hence, it should be the last element in the destructuring assignment. - There can be only one rest in any destructuring assignment.
let diet = ['pizza', 'burger','noodles','roasted','sushi','dosa','uttapam'];
let [first, ,third, ...others] = diet;
first;
third;
others;
- Rest also works with objects. Only difference is that elements will be collected into a new object instead of an arrray.
let days = { 'mon':1,'tue':2,'wed':3,'thu':4,'fri':5,'sat':6,'sun':7};
let {sat, sun, ...working} = days;
let off = {sat, sun};
working; // { mon: 1, tue: 2, wed: 3, thu: 4, fri: 5 }
off; // { sat: 6, sun: 7 }
- Although both look same, but they work differently based on where they are used.
Subtle Distinction b/w Rest & Spread:
- Spread operator is used where we would write values separated by commas
- Rest pattern is used we would write variables names separated by commas.
The above is the detailed content of Spread & Rest Operator. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

JavaScript is the core language of modern web development and is widely used for its diversity and flexibility. 1) Front-end development: build dynamic web pages and single-page applications through DOM operations and modern frameworks (such as React, Vue.js, Angular). 2) Server-side development: Node.js uses a non-blocking I/O model to handle high concurrency and real-time applications. 3) Mobile and desktop application development: cross-platform development is realized through ReactNative and Electron to improve development efficiency.

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

The main uses of JavaScript in web development include client interaction, form verification and asynchronous communication. 1) Dynamic content update and user interaction through DOM operations; 2) Client verification is carried out before the user submits data to improve the user experience; 3) Refreshless communication with the server is achieved through AJAX technology.
