Một số Tip & Trick khi viết code JavaScript

1. Tạo mảng số nằm trong một khoảng

let start = 1900,
    end = 2000;
[...new Array(end + 1).keys()].slice(start);
// [ 1900, 1901, ..., 2000]

Array.from({ length: end - start + 1 }, (_, i) => start + i);

2. Sử dụng mảng các giá trị là đối số cho function

Có những trường hợp mà bạn cần lấy các giá trị của mảng, rồi truyền chúng như đối số của function. Với ES6, bạn có thể sử dụng spread operator (...)và trích xuất mảng từ [arg1, arg2] thành (arg1, arg2)

const parts = {
  first: [0, 2],
  second: [1, 3],
};

["Hello", "World", "JS", "Tricks"].slice(...parts.second);
// ["World", "JS", "Tricks"]

Bạn có thể sử dụng nó với bất cứ function nào.

3. Sử dụng đối số của các phương thức Math với nhiều giá trị

Khi chúng ta cần tìm Math.max hoặc Math.min của các số trong mảng, chúng ta thực hiện như dưới đây:

// Tìm phần tử có vị trí y lớn nhất
const elementsHeight =  [...document.body.children].map(
  el => el.getBoundingClientRect().y
);
Math.max(...elementsHeight);
// 474

const numbers = [100, 100, -1000, 2000, -3000, 40000];
Math.min(...numbers);
// -3000

4. Hợp nhất / làm phẳng mảng trong mảng

Phương thức để làm phẳng cho Array là Array.flat, tuy nhiên, đối số của nó là độ sâu mà bạn cần làm phẳng (mặc định: 1). Nhưng nếu bạn không biết độ sâu bằng bao nhiêu thì sao ? Vậy lúc này, hãy đặt Infinity làm đối số.

const arrays = [[10], 50, [100, [2000, 3000, [40000]]]];
arrays.flat(Infinity);
// [ 10, 50, 100, 2000, 3000, 40000 ]

5. Ngăn chặn code bị crash

Việc có những hành vi không dự đoán được trong code (ví dụ như biến có thể bị null, hoặc khác với kiểu mà bạn viết trong code) là điều không tốt, nhưng nếu điều đó xảy ra, bạn cần xử lý nó.

Ví dụ: Một lỗi phổ biến như TypeError, khi bạn cố gắng lấy property của undefined/null.

Note: Sử dụng như ví dụ dưới nếu dự án của bạn chưa support optional chaining. Bạn có thể tìm hiểu thêm về optional chaining ở đây

const found = [{ name: "Alex" }].find(i => i.name === 'Jim');
console.log(found.name);
// TypeError: Cannot read property 'name' of undefined

Bạn có thể tránh lỗi này bằng cách

const found = [{ name: "Alex" }].find(i => i.name === 'Jim') || {};
console.log(found.name);
// undefined

6. Truyền đối số là template literals

Ví dụ tốt nhất sử dụng tính năng này là styled-components, ở ES6 bạn có thể truyền template literals như là đối số của function mà không cần dấu ngoặc.

const Button = styled.a`
  /* This renders the buttons above... Edit me! */
  display: inline-block;
  border-radius: 3px;
  padding: 0.5rem 0;
  margin: 0.5rem 1rem;
  width: 11rem;
  background: transparent;
  color: white;
  border: 2px solid white;
`
const makeList = (raw) =>
  raw
    .join()
    .trim()
    .split("\n")
    .map((s, i) => `${i + 1}. ${s}`)
    .join("\n");

makeList`
Hello, World
Hello, World
`;
// 1. Hello
// 2. World

7. Hoán đổi biến

Với cú pháp Destructuring assignment bạn có thể dễ dàng tráo đổi các biến

let a = "hello";
let b = "world";

// Wrong
a = b
b = a
// { a: 'world', b: 'world' }

// Correct
[a, b] = [b, a];
// { a: 'world', b: 'hello' }

Giải pháp này sẽ bị sai trong trường hợp thêm biến thứ 3 😦

8. Sắp xếp theo thứ tự alphabetical

Gỉa sử bạn cần sắp xếp một chuỗi theo bảng chữ cái của ngôn ngữ đó. Nhưng bạn lại không rành về ngôn ngữ đó. Lúc này, hãy sử dụng đúng phương thức để đảm bảo rằng nó được sắp xếp đúng thứ tự

Ví dụ. Bảng chữ cái Deutsche

// Wrong
["a", "z", "ä"].sort((a, b) => a - b);
// ['a', 'z', 'ä']

// Correct
["a", "z", "ä"].sort((a, b) => a.localeCompare(b));
// [ 'a', 'ä', 'z' ]

9. Loại trừ các giá trị falsy trong mảng

const collection = [obj1, obj2, undefined, obj3, undefined];
const cleanCollection = collection.filter(Boolean);
// [obj1, obj2, obj3]

Boolean() sẽ trả về true cho những giá trị truthy và false cho những giá trị falsy (null, undefined, 0, '', false).

Note: []{} không phải là các giá trị falsy

const collection = [obj1, obj2, {}, obj3, undefined];
const cleanCollection = collection.filter(Boolean);
// [obj1, obj2, {}, obj3]

10. Che giấu chuỗi

Mẹo cuối cùng là về việc che các chuỗi. Chúng ta cần giấu đi tất cả các ký tự trừ 3 ký tự cuối cùng của chuỗi. Lúc này, chũng ta sẽ chỉ lấy 3 ký tự từ cuối của nó substr (-3), và điền độ dài còn lại bằng bất kỳ ký hiệu nào (ví dụ *)

const password = "hackme";
password.substr(-3).padStart(password.length, "*");
// ***kme

Bài viết đến đây là hết. Cảm ơn các bạn đã theo dõi, hy vọng bài viết sẽ giúp ích cho các bạn trong công việc 🎉

Nguồn: https://dev.to/gigantz/9-javascript-tips-tricks-to-code-like-a-wizard-559i


All Rights Reserved