当前位置:网站首页>"Source code interpretation" famous programmer TJ's only library
"Source code interpretation" famous programmer TJ's only library
2022-07-05 07:34:00 【Front end watermelon brother_】
Hello everyone , I'm brother watermelon . I recently tried to open a series of source code interpretation , Interpret some simple or complex source code from time to time .
Today I want to interpret npm Third party library source code :only, Warehouse address is :https://github.com/tj/node-only
This library is tj Tools and methods written by great God .tj God is a programmer boss , Mainly in the nodejs The field has made many open source contributions , yes Express、Koa、node-canvas And the creators and contributors of a series of well-known open source projects .
only What can the method do ?
only Its function is very simple : Return the whitelist attribute of an object . To be specific , It is to extract some attributes of the specified object and put them into the new object , And return this new object .
const only = require('only');
var obj = {
name: 'tobi',
last: 'holowaychuk',
email: '[email protected]',
_id: '12345'
};
only(obj, 'name last email');
/* { name: 'tobi', last: 'holowaychuk', email: '[email protected]' } */
only Method requires an object to be passed in , And a white list , This list can be an array of attribute names , It can also be a string represented by a space spaced attribute name .
The second parameter supports string format , Because it is more convenient to use , Can write a lot less quotation marks . Elegance in use , It's our design API It needs to be considered .
only The implementation of the library
module.exports = function(obj, keys){
obj = obj || {
};
if ('string' == typeof keys) keys = keys.split(/ +/);
return keys.reduce(function(ret, key){
if (null == obj[key]) return ret;
ret[key] = obj[key];
return ret;
}, {
});
};
Code reading
First, for the first parameter obj Simple fault tolerance . If obj Is a value of undefined or null False values like , We set it as an empty object , Prevent throwing errors .
Then it is possible to convert the white list in the form of string into the format of array .
The method used is :keys.split(/ +/), It's used here split Regular expression parameter writing method ,/ +/ This regular expression represents a number greater than or equal to 1 Multiple space characters of . This is actually a very common way to split strings and get arrays .
Finally, use what Lao Niao likes very much Array.prototype.reduce() Writing , Come on keys Iterating through arrays .
For each key, As long as the original array is not null or undefined, Just copy it to the new object .
reduce() The return value of the method is the new object we want , Return it directly to .
Let's talk about why some senior front-end like to use reduce() Method . Because reduce This method is compared with forEach、map These methods should be more flexible , It can return any type of value without losing brevity . forEach no return value , and map Only arrays of the same size of array type can be returned , Although it conforms to the principle of single responsibility , But it also loses flexibility .
I once wrote an article about reduce The article , If you are interested, you can have a look : Why do we say array instances reduce The method is flexible ?
only The method is interpreted .
边栏推荐
- Course learning accumulation ppt
- Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
- What is sodium hydroxide?
- deepin 20 kivy unable to get a window, abort
- Mouse click fireworks explosion effect
- Basic series of SHEL script (III) for while loop
- CADD课程学习(5)-- 构建靶点已知的化合结构(ChemDraw)
- Using GEE plug-in in QGIS
- Professional knowledge of public security -- teacher bilitong
- Intelligent target detection 59 -- detailed explanation of pytoch focal loss and its implementation in yolov4
猜你喜欢

The mutual realization of C L stack and queue in I

Altimeter data knowledge point 2
![[idea] efficient plug-in save actions to improve your work efficiency](/img/6e/49037333964865d9900ddf5698f7e6.jpg)
[idea] efficient plug-in save actions to improve your work efficiency

Microservice registry Nacos introduction

UE5热更新-远端服务器自动下载和版本检测(SimpleHotUpdate)

How to deal with excessive memory occupation of idea and Google browser

Light up the running light, rough notes for beginners (1)

Butterfly theme beautification - Page frosted glass effect

Negative number storage and type conversion in programs

Miracast技术详解(一):Wi-Fi Display
随机推荐
氢氧化钠是什么?
ModuleNotFoundError: No module named ‘picamera‘
Simple operation with independent keys (hey, a little fancy) (keil5)
Use of Pai platform
How can Oracle SQL statements modify fields that are not allowed to be null to allow nulls?
Rough notes of C language (1)
I implement queue with C I
[idea] common shortcut keys
Unconventional ending disconnected from the target VM, address: '127.0.0.1:62635', transport: 'socket‘
SD_ CMD_ SEND_ SHIFT_ REGISTER
2022年PMP项目管理考试敏捷知识点(7)
I can't stand the common annotations of idea anymore
Apple terminal skills
Basic operation of external interrupt (keil5)
公安基础知识--fb
Mouse click fireworks explosion effect
I 用c l 栈与队列的相互实现
Database SQL practice 3. Find the current salary details of the current leaders of each department and their corresponding department number Dept_ no
ORACLE CREATE SEQUENCE,ALTER SEQUENCE,DROP SEQUENCE
Detour of Tkinter picture scaling