DEV Community

StormyTalent
StormyTalent

Posted on

50+ hints JS(ES6+) developer must know (2nd part)

Hi, StormyTalent again! And this time we will see some bad and good usages of Array and Destructuring.
This will take you to skim at 5 minutes but you will get great experience of JS(ES6+).

1. Array
Use the literal syntax for array creation. eslint: no-array-constructor

// bad const items = new Array(); // good const items = []; 
Enter fullscreen mode Exit fullscreen mode

Use Array#push instead of direct assignment to add items to an array.

const someStack = []; // bad someStack[someStack.length] = 'abracadabra'; // good someStack.push('abracadabra'); 
Enter fullscreen mode Exit fullscreen mode

Use array spreads ... to copy arrays.

// bad const len = items.length; const itemsCopy = []; let i; for (i = 0; i < len; i += 1) { itemsCopy[i] = items[i]; } // good const itemsCopy = [...items]; 
Enter fullscreen mode Exit fullscreen mode

To convert an iterable object to an array, use spreads ... instead of Array.from.

const foo = document.querySelectorAll('.foo'); // good const nodes = Array.from(foo); // best const nodes = [...foo]; 
Enter fullscreen mode Exit fullscreen mode

Use Array.from for converting an array-like object to an array.

const arrLike = { 0: 'foo', 1: 'bar', 2: 'baz', length: 3 }; // bad const arr = Array.prototype.slice.call(arrLike); // good const arr = Array.from(arrLike); 
Enter fullscreen mode Exit fullscreen mode

Use Array.from instead of spread ... for mapping over iterables, because it avoids creating an intermediate array.

// bad const baz = [...foo].map(bar); // good const baz = Array.from(foo, bar); 
Enter fullscreen mode Exit fullscreen mode

Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following 8.2. eslint: array-callback-return

// good [1, 2, 3].map((x) => { const y = x + 1; return x * y; }); // good [1, 2, 3].map((x) => x + 1); // bad - no returned value means `acc` becomes undefined after the first iteration [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => { const flatten = acc.concat(item); }); // good [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => { const flatten = acc.concat(item); return flatten; }); // bad inbox.filter((msg) => { const { subject, author } = msg; if (subject === 'Mockingbird') { return author === 'Harper Lee'; } else { return false; } }); // good inbox.filter((msg) => { const { subject, author } = msg; if (subject === 'Mockingbird') { return author === 'Harper Lee'; } return false; }); 
Enter fullscreen mode Exit fullscreen mode

Use line breaks after open and before close array brackets if an array has multiple lines

// bad const arr = [ [0, 1], [2, 3], [4, 5], ]; const objectInArray = [{ id: 1, }, { id: 2, }]; const numberInArray = [ 1, 2, ]; // good const arr = [[0, 1], [2, 3], [4, 5]]; const objectInArray = [ { id: 1, }, { id: 2, }, ]; const numberInArray = [ 1, 2, ]; 
Enter fullscreen mode Exit fullscreen mode

2. Destructuring
Use object destructuring when accessing and using multiple properties of an object. eslint: prefer-destructuring

// bad function getFullName(user) { const firstName = user.firstName; const lastName = user.lastName; return `${firstName} ${lastName}`; } // good function getFullName(user) { const { firstName, lastName } = user; return `${firstName} ${lastName}`; } // best function getFullName({ firstName, lastName }) { return `${firstName} ${lastName}`; } 
Enter fullscreen mode Exit fullscreen mode

Use array destructuring. eslint: prefer-destructuring
const arr = [1, 2, 3, 4];

// bad const first = arr[0]; const second = arr[1]; // good const [first, second] = arr; 
Enter fullscreen mode Exit fullscreen mode

Use object destructuring for multiple return values, not array destructuring.

// bad function processInput(input) { // then a miracle occurs return [left, right, top, bottom]; } // the caller needs to think about the order of return data const [left, __, top] = processInput(input); // good function processInput(input) { // then a miracle occurs return { left, right, top, bottom }; } // the caller selects only the data they need const { left, top } = processInput(input); 
Enter fullscreen mode Exit fullscreen mode

Top comments (2)

Collapse
 
satel profile image
Satel

Good catch!

Collapse
 
stormytalent profile image
StormyTalent

Perfect explanations!