In daily programming work we often encounter problems such as: checking key
to see if they exist, conditional manipulation of data, filtering value
in array
, etc.
Here I list some common cases that I personally love and are very helpful to make the code shorter and clearer. Some of you will wonder why not use the library, the library already has it all.
- Sometimes killing chickens doesn’t need a buffalo knife
- I always make good use of the built-in functions of js first
1. Conditions when adding Properties to the object
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token keyword">const</span> isValid <span class="token operator">=</span> <span class="token boolean">false</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> age <span class="token operator">=</span> <span class="token number">18</span> <span class="token punctuation">;</span> <span class="token comment">// Chúng ta cần sẽ dùng toán tử spread (...) để xử lý</span> <span class="token keyword">const</span> person <span class="token operator">=</span> <span class="token punctuation">{</span> id <span class="token operator">:</span> <span class="token string">"1234"</span> <span class="token punctuation">,</span> name <span class="token operator">:</span> <span class="token string">"Tuan"</span> <span class="token punctuation">,</span> <span class="token operator">...</span> <span class="token punctuation">(</span> isValid <span class="token operator">&&</span> <span class="token punctuation">{</span> isValid <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token operator">...</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> age <span class="token operator">>=</span> <span class="token number">18</span> <span class="token operator">||</span> isValid <span class="token punctuation">)</span> <span class="token operator">&&</span> <span class="token punctuation">{</span> cart <span class="token operator">:</span> <span class="token number">0</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"person :>> "</span> <span class="token punctuation">,</span> person <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 | person :>> { id: '1234', name: 'Tuan', cart: 0 } |
2. Check if a Property
exists in an object
We can use keyword in
to check if the property exists in Object
1 2 3 4 5 6 7 8 | <span class="token keyword">const</span> person <span class="token operator">=</span> <span class="token punctuation">{</span> id <span class="token operator">:</span> <span class="token string">"123"</span> <span class="token punctuation">,</span> name <span class="token operator">:</span> <span class="token string">"tuan"</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"id in person :>> "</span> <span class="token punctuation">,</span> <span class="token string">"id"</span> <span class="token keyword">in</span> person <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"name in person :>> "</span> <span class="token punctuation">,</span> <span class="token string">"name"</span> <span class="token keyword">in</span> person <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | id in person :>> true name in person :>> true |
3. Destructuring object with Dynamic key
We can also set an alias name
for a variable that has been Destructuring
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">const</span> productData <span class="token operator">=</span> <span class="token punctuation">{</span> id <span class="token operator">:</span> <span class="token string">"123"</span> <span class="token punctuation">,</span> name <span class="token operator">:</span> <span class="token string">"laptop"</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> deviceName <span class="token punctuation">}</span> <span class="token operator">=</span> productData <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"deviceName :>> "</span> <span class="token punctuation">,</span> deviceName <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> extractKey <span class="token operator">=</span> <span class="token string">"name"</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> <span class="token punctuation">{</span> <span class="token punctuation">[</span> extractKey <span class="token punctuation">]</span> <span class="token operator">:</span> data <span class="token punctuation">}</span> <span class="token operator">=</span> productData <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | deviceName :>> laptop data :>> laptop |
4. Loop an object to access key
and value
simultaneously
The key
and the value
can be accessed at the same time using the entries
. function
1 2 3 4 5 6 7 8 9 | <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span> id <span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">,</span> name <span class="token operator">:</span> <span class="token string">"laptop"</span> <span class="token punctuation">,</span> isSale <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> Object <span class="token punctuation">.</span> <span class="token function">entries</span> <span class="token punctuation">(</span> data <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">forEach</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter"><span class="token punctuation">[</span> key <span class="token punctuation">,</span> value <span class="token punctuation">]</span></span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token string">"id"</span> <span class="token punctuation">,</span> <span class="token string">"name"</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> <span class="token function">includes</span> <span class="token punctuation">(</span> key <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"key :>> "</span> <span class="token punctuation">,</span> key <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"value :>> "</span> <span class="token punctuation">,</span> value <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 5 6 | key :>> id value :>> 1 key :>> name value :>> laptop |
5. Prevent error when accessing any key
that does not exist in the object by using optional string ( ?.
)
1 2 3 4 5 6 | <span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token punctuation">{</span> id <span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">,</span> isSale <span class="token operator">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data?.name :>> "</span> <span class="token punctuation">,</span> data <span class="token operator">?.</span> name <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data?.name?.user :>> "</span> <span class="token punctuation">,</span> data <span class="token operator">?.</span> name <span class="token operator">?.</span> user <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data?.displayName :>> "</span> <span class="token punctuation">,</span> data <span class="token operator">?.</span> displayName <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 | data?.name :>> undefined data?.name?.user :>> undefined data?.displayName :>> undefined |
Warning: optional string is used when you are not sure whether its Property
exists or not in the data. If you are sure that the keys must be in the data and if they are not, then you should throw error
to raise an lỗi
instead of preventing them.
6. Check for falsy value
values in an array
1 2 3 4 5 6 7 8 | <span class="token keyword">const</span> fruitList <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">"apple"</span> <span class="token punctuation">,</span> <span class="token keyword">null</span> <span class="token punctuation">,</span> <span class="token string">"mango"</span> <span class="token punctuation">,</span> <span class="token keyword">undefined</span> <span class="token punctuation">,</span> <span class="token string">""</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> filterFruitList <span class="token operator">=</span> fruitList <span class="token punctuation">.</span> <span class="token function">filter</span> <span class="token punctuation">(</span> Boolean <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"filterFruitList :>> "</span> <span class="token punctuation">,</span> filterFruitList <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> isAnyFruit <span class="token operator">=</span> fruitList <span class="token punctuation">.</span> <span class="token function">some</span> <span class="token punctuation">(</span> Boolean <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"isAnyFruit :>> "</span> <span class="token punctuation">,</span> isAnyFruit <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | filterFruitList :>> [ 'apple', 'mango' ] isAnyFruit :>> true |
7. Remove duplicate values in array.
I use this function very often (quickly)
1 2 3 4 5 | <span class="token keyword">const</span> fruitList <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">"apple"</span> <span class="token punctuation">,</span> <span class="token string">"mango"</span> <span class="token punctuation">,</span> <span class="token string">"apple"</span> <span class="token punctuation">,</span> <span class="token string">"mango"</span> <span class="token punctuation">,</span> <span class="token string">"grapes"</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> uniqFruitList <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token operator">...</span> <span class="token keyword">new</span> <span class="token class-name">Set</span> <span class="token punctuation">(</span> fruitList <span class="token punctuation">)</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"uniqFruitList :>> "</span> <span class="token punctuation">,</span> uniqFruitList <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 | uniqFruitList :>> [ 'apple', 'mango', 'grapes' ] |
Note: this is a feature of ES6.
8. Check if a variable is of type array or not
Since array is essentially an array {0:{}, 1:{}, 2:{}....}
so typeof
it will return the value as object
1 2 3 4 5 6 | <span class="token keyword">const</span> fruitList <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">"apple"</span> <span class="token punctuation">,</span> <span class="token string">"mango"</span> <span class="token punctuation">,</span> <span class="token string">"apple"</span> <span class="token punctuation">,</span> <span class="token string">"mango"</span> <span class="token punctuation">,</span> <span class="token string">"grapes"</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"typeof fruitList :>> "</span> <span class="token punctuation">,</span> <span class="token keyword">typeof</span> fruitList <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"Array.isArray(fruitList) :>> "</span> <span class="token punctuation">,</span> Array <span class="token punctuation">.</span> <span class="token function">isArray</span> <span class="token punctuation">(</span> fruitList <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | <span class="token keyword">typeof</span> fruitList <span class="token operator">:</span> <span class="token operator">>></span> object Array <span class="token punctuation">.</span> <span class="token function">isArray</span> <span class="token punctuation">(</span> fruitList <span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token operator">>></span> <span class="token boolean">true</span> |
9. Convert String to Number and Number to String using ‘ + ‘ . operator
The +
operator is a special operator, so its position also determines its meaning in each specific case.
1 2 3 4 5 6 7 8 | <span class="token keyword">const</span> numberId <span class="token operator">=</span> <span class="token string">"1234"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"+numberId :>> "</span> <span class="token punctuation">,</span> <span class="token operator">+</span> numberId <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"typeof +numberId :>> "</span> <span class="token punctuation">,</span> <span class="token keyword">typeof</span> <span class="token operator">+</span> numberId <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"numberId + '':>> "</span> <span class="token punctuation">,</span> numberId <span class="token operator">+</span> <span class="token string">""</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"typeof numberId + '' :>> "</span> <span class="token punctuation">,</span> <span class="token keyword">typeof</span> numberId <span class="token operator">+</span> <span class="token string">""</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 5 | +numberId :>> 1234 typeof +numberId :>> number numberId + '':>> 1234 typeof numberId + '' :>> string |
10. Conditionally assign other values when the value is null and undefined using the nullish coalescing
operator ( ??
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">let</span> data <span class="token operator">=</span> <span class="token keyword">undefined</span> <span class="token operator">??</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 1 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> <span class="token keyword">null</span> <span class="token operator">??</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 2 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> <span class="token string">""</span> <span class="token operator">??</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 3 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> <span class="token number">5</span> <span class="token operator">??</span> <span class="token keyword">null</span> <span class="token operator">??</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 4 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Khi sử dụng cùng toán tử gán thì nó sẽ dựa trên giá trị hiện tại của nó</span> data <span class="token operator">??=</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 5 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 5 6 | data 1 :>> no Data data 2 :>> no Data data 3 :>> data 4 :>> 5 data 5 :>> 5 |
Many of you also confuse between ??
with the OR operator ( ||
)
The OR operator is used when you want to assign a different value according to the condition if the value is not true . Meaning if it is one of the following values ( 0
, ' '
, null
, undefined
, false
, NaN
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">let</span> data <span class="token operator">=</span> <span class="token keyword">undefined</span> <span class="token operator">||</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 1 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> <span class="token keyword">null</span> <span class="token operator">||</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 2 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> <span class="token string">""</span> <span class="token operator">||</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 3 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> data <span class="token operator">=</span> <span class="token number">5</span> <span class="token operator">||</span> <span class="token keyword">null</span> <span class="token operator">||</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 4 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Khi sử dụng cùng toán tử gán thì nó sẽ dựa trên giá trị hiện tại của nó</span> data <span class="token operator">||=</span> <span class="token string">"no Data"</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"data 5 :>> "</span> <span class="token punctuation">,</span> data <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 4 5 6 | data 1 :>> no Data data 2 :>> no Data data 3 :>> no Data data 4 :>> 5 data 5 :>> 5 |
11. Boolean
conversion using the !!
1 2 3 | console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"This is not Empty :>> "</span> <span class="token punctuation">,</span> <span class="token operator">!</span> <span class="token operator">!</span> <span class="token string">""</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"This is not Empty :>> "</span> <span class="token punctuation">,</span> <span class="token operator">!</span> <span class="token operator">!</span> <span class="token string">"This is not Empty"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | This is not Empty :>> false This is not Empty :>> true |
It’s all the same, many of you still have questions !!
what is different from !
1 2 3 | console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"This is Empty :>> "</span> <span class="token punctuation">,</span> <span class="token operator">!</span> <span class="token string">""</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"This is Empty :>> "</span> <span class="token punctuation">,</span> <span class="token operator">!</span> <span class="token string">"This is Empty"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | This is Empty :>> true This is Empty :>> false |
Oh so if it was….
1 2 3 | console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"This is ... :>> "</span> <span class="token punctuation">,</span> <span class="token operator">!</span> <span class="token operator">!</span> <span class="token operator">!</span> <span class="token string">""</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"This is ... :>> "</span> <span class="token punctuation">,</span> <span class="token operator">!</span> <span class="token operator">!</span> <span class="token operator">!</span> <span class="token string">"This is ..."</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
1 2 3 | This is ... :>> true This is ... :>> false |
Actually it only has !
and !!
only from the 3rd up oil on it is simply the negation of !!
never mind.
Roundup
As always, I hope you enjoyed this article and learned something new.
Thank you and see you in the next posts!
If you find this blog interesting, please give me a like and subscribe to support me. Thank you.