JavaScript utilities - Single line of code

Nội dung bài viết

JavaScript utilities - Anh em dev nào cũng có một file này, như một bí kíp vậy, được sử dụng từ project này qua project khác. Trong bài post này, hãy để tipjs share thêm một số bí kíp khác giúp chúng ta hoàn thành file utilities js một cách hoàn hảo hơn, chỉ mới một line code!

Học được gì sau bài viết này

  • Viết code một cách sạch sẽ
  • Tham khảo một số code mẫu
  • Mẹo này có thể chưa tốt đối với một số trường hợp

ARRAY - single line of code

Dưới đây là một số code mẫu chỉ giải quyết trong vòng một line code. Có thể nó không phù hợp với tất cả ngữ cảnh hay tình huống, nhưng nó khá tốt cho những ai muốn được học hỏi thêm về khả năng viết code của mình. Cải thiện được nếu bạn có thể. Nhưng tipjs vẫn có một câu nói thế này:


"Một người code giỏi không có nghĩa là code của họ chạy ổn và hiệu suất cao. Mà trong đó còn có thể truyền đạt lại cho người khác một cách dễ dàng".


Vì lẽ đó nên cẩn thận, bởi người sau có thể không hiểu code của bạn, cho dù là ngắn nhất.


Notes: Một số thủ thuật làm việc với Array JavaScript

Check if all items in an array are equal

const areEqual = arr => arr.length > 0 && arr.every(item => item === arr[0]);
// areEqual([1, 2, 3, 4]) === false
// areEqual(['hello', 'hello', 'hello']) === true

Check if an object is an array

const isArray = obj => Array.isArray(obj);

Convert an array of strings to numbers

const toNumbers = arr => arr.map(Number);

// Or
const toNumbers = arr => arr.map(x => +x);

// toNumbers(['2', '3', '4']) returns [2, 3, 4]

Create an array of cumulative sum

const accumulate = arr => arr.map((sum => value => sum += value)(0));

// Or
const accumulate = arr => arr.reduce((a, b, i) => i === 0 ? [b] : [...a, b + a[i - 1]], []);

// Or
const accumulate = arr => arr.reduce((a, b, i) => i === 0 ? [b] : [...a, b + a[i - 1]], 0);

/*
accumulate([1, 2, 3, 4]) === [1, 3, 6, 10]
// 1             = 1
// 1 + 2         = 3
// 1 + 2 + 3     = 6
// 1 + 2 + 3 + 4 = 10
*/

Create an array of numbers in the given range

const range = (min, max) => [...Array(max - min + 1).keys()].map(i => i + min);
// range(5, 10) === [5, 6, 7, 8, 9, 10]

Empty an array

const empty = arr => arr.length = 0;

// Or
arr = [];

Find the length of the longest string in an array

const findLongest = words => Math.max(...(words.map(el => el.length)));
// findLongest(['always','look','on','the','bright','side','of','life']) === 6;

Find the maximum item of an array

const max = arr => Math.max(...arr);

Find the minimum item of an array

const min = arr => Math.min(...arr);

Flatten an array

const flat = arr => arr.reduce((a, b) => Array.isArray(b) ? [...a, ...flat(b)] : [...a, b], []);

// Or
// See the browser compatibility at https://caniuse.com/#feat=array-flat
const flat = arr => arr.flat();

// flat(['cat', ['lion', 'tiger']]) returns ['cat', 'lion', 'tiger']

Get a random item from an array

const randomItem = arr => arr[(Math.random() * arr.length) | 0];

Get the average of an array

const average = arr => arr.reduce((a, b) => a + b, 0) / arr.length;

Get the sum of array of numbers

const sum = arr => arr.reduce((a, b) => a + b, 0);

Get the unique values of an array

const unique = arr => [...new Set(arr)];

// Or
const unique = arr => arr.filter((el, i, array) => array.indexOf(el) === i);

Merge two arrays

// Merge but don't remove the duplications
const merge = (a, b) => a.concat(b);
// Or
const merge = (a, b) => [...a, ...b];

// Merge and remove the duplications
const merge = [...new Set(a.concat(b))];
// Or
const merge = [...new Set([...a, ...b])];

DATETIME - single line of code

Còn nữa... Resource:  reddit 

Có thể bạn đã bị missing