当前位置:网站首页>"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 .
边栏推荐
猜你喜欢
CADD course learning (5) -- Construction of chemosynthesis structure with known target (ChemDraw)
Import CV2 prompt importerror: libgl so. 1: Cannot open shared object file: no such file or directory
QT small case "addition calculator"
CADD课程学习(5)-- 构建靶点已知的化合结构(ChemDraw)
arcgis_ spatialjoin
Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
I 用c I 实现队列
第 2 章:小试牛刀,实现一个简单的Bean容器
Chapter 2: try to implement a simple bean container
Microservice registry Nacos introduction
随机推荐
HDU1232 畅通工程(并查集)
Detailed explanation of miracast Technology (I): Wi Fi display
Pytorch has been installed in anaconda, and pycharm normally runs code, but vs code displays no module named 'torch‘
Delayqueue usage and scenarios of delay queue
Oracle-触发器和程序包
Brief description of inux camera (Mipi interface)
Raspberry pie 4B arm platform aarch64 PIP installation pytorch
With the help of Navicat for MySQL software, the data of a database table in different or the same database link is copied to another database table
When jupyter notebook is encountered, erroe appears in the name and is not output after running, but an empty line of code is added downward, and [] is empty
I 用c I 实现队列
Clickhouse database installation deployment and remote IP access
Negative number storage and type conversion in programs
The mutual realization of C L stack and queue in I
The golang timer uses the stepped pit: the timer is executed once a day
Qu'est - ce que l'hydroxyde de sodium?
Basic knowledge of public security -- FB
Unforgettable summary of 2021
Altimeter data knowledge point 2
What if the DataGrid cannot see the table after connecting to the database
And play the little chestnut of dynamic agent