每天学习几个node库 o(^▽^)┛
————————————————————

arr-flatten github链接: https://github.com/jonschlinkert/arr-flatten

这个库提供了扁平化数组的方法,原理是遍历数组,判断数组每一项是否为数组,并且对每一项为数组的数组项进行递归处理返回扁平化数组的方法,最终实现对数组扁平化的处理

tips:

方法中运用了递归的思想

代码如下:

jonschlinkertlink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*!
* arr-flatten <https://github.com/jonschlinkert/arr-flatten>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/

'use strict';

module.exports = function (arr) {
return flat(arr, []);
};

function flat(arr, res) {
var i = 0, cur;
var len = arr.length;
for (; i < len; i++) {
cur = arr[i];
Array.isArray(cur) ? flat(cur, res) : res.push(cur);
}
return res;
}

dedupe github链接: https://github.com/seriousManual/dedupe

这个库提供了对数组进行去重处理的方法,可以指定自定义的去重条件

原理是创建一个新的空数组和空对象,遍历每个数组,将每个数组项json字符串化(或者执行自定义的判断条件),判断对象中键为处理后的值是否为true,如果不是,则说明此项第一次出现,加入数组,设置对象key为json化的值所在的value为true;如果不是,说明此前已经填入过该项,出现重复,则直接略过,最后得到的结果就是去重后的数组

代码如下:

seriousManuallink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'use strict'

function dedupe (client, hasher) {
hasher = hasher || JSON.stringify

const clone = []
const lookup = {}

for (let i = 0; i < client.length; i++) {
let elem = client[i]
let hashed = hasher(elem)

if (!lookup[hashed]) {
clone.push(elem)
lookup[hashed] = true
}
}

return clone
}

module.exports = dedupe