当前位置:网站首页>"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 .
边栏推荐
- Rough notes of C language (2) -- constants
- DataGrid offline installation of database driver
- repo. conda. An example of COM path error
- Intelligent target detection 59 -- detailed explanation of pytoch focal loss and its implementation in yolov4
- [node] NVM version management tool
- 玩转gRPC—深入概念与原理
- 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
- What is deep learning?
- Delayqueue usage and scenarios of delay queue
- Ethtool principle introduction and troubleshooting ideas for network card packet loss (with ethtool source code download)
猜你喜欢
C learning notes
Idea common settings
Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
What if the DataGrid cannot see the table after connecting to the database
Explanation of parallel search set theory and code implementation
Delayqueue usage and scenarios of delay queue
Import CV2 prompt importerror: libgl so. 1: Cannot open shared object file: no such file or directory
Detailed explanation of miracast Technology (I): Wi Fi display
How to delete the virus of inserting USB flash disk copy of shortcut to
611. 有效三角形的个数
随机推荐
The number of occurrences of numbers in the offer 56 array (XOR)
2022 PMP project management examination agile knowledge points (7)
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
2022年PMP项目管理考试敏捷知识点(7)
公安专业知识--哔哩桐老师
UNIX commands often used in work
Basic series of SHEL script (II) syntax + operation + judgment
Qu'est - ce que l'hydroxyde de sodium?
What is deep learning?
Negative number storage and type conversion in programs
Unforgettable summary of 2021
Anaconda pyhton multi version switching
Cookie operation
Pagoda create multiple sites with one server
[tf1] save and load parameters
Solve tensorfow GPU modulenotfounderror: no module named 'tensorflow_ core. estimator‘
I 用c I 实现队列
arcgis_ spatialjoin
玩转gRPC—深入概念与原理
Idea push project to code cloud