webpack-chain 速查手册之 ChainedSet

2021-04-28  本文已影响0人  AizawaSayo

webpack-chain GitHub 中文文档
webpack-chain 速查手册之 ChainedMap

Set 和 Map 数据类型

Set 就是一组值的集合,值允许任何类型,但不可以重复。会记住元素原始插入顺序所以是可迭代的。如果传入重复元素,会在Set中自动被过滤,可以利用Set来去重。
初始化Set需要传入一个数组,或者直接初始化空Set:new Set()

var s = new Set([1, 2, 3, 2, 1, '哈哈'])
console.log(s) // Set(2) {1, 2, 3, '哈哈'} 自动去除重复项
s.add(4) // 添加新元素 4 
s.delete(3) // 删除元素 3
s.has(3) // 是否存在元素 3:false 
s.clear() // 移除s中所有项

Map以[键,值]的形式存储数据,并且能够记住键的原始插入顺序。键和值允许任何数据类型,键不可重复是惟一的,可以极高效地查找数据。
初始化Map需要传一个二维数组,或者直接初始化一个空Map:new Map()

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]])
console.log(m) // Map(3) {"Michael" => 95, "Bob" => 75, "Tracy" => 85}
m.set('Adam', 67); // 添加新的key-value
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.clear() // Map {}  

获取它们的元素个数的属性是size,如:

console.log(new Set([1,2,1,2]).size) // 2 

它们都拥有遍历方法:

console.log(new Set([1,2,3,4]).values()) // SetIterator {1, 2, 3, 4}
console.log(new Set([1,2,3,4]).entries()) // SetIterator {1 => 1, 2 => 2, 3 => 3, 4 => 4}
console.log(new Map([['name','jackson'],['age',11]]).keys()) // MapIterator {"name", "age"}
new Map([['name','jackson'],['age',11]]).forEach((value, key) => { console.log(key, value)} )  
// name jackson
// age 11

ChainedSet的API和方法:

操作类似于JavaScript Map。除非另有说明,否则这些方法将返回 ChainedSet , 允许再链式调用这些方法。
添加一个值用add(value), 同时添加多个用merge(arr)

// 添加/追加 给Set末尾位置一个值.
// value: *
add(value)

// 添加 给Set开始位置一个值.
// value: *
prepend(value)

// 移除Set中全部值.
clear()

// 移除Set中一个指定的值.
// value: *
delete(value)

// 检测Set中是否存在一个值.
// value: *
// returns: Boolean
has(value)

// 返回Set中值的数组.
// returns: Array
values()

// 连接给定的数组到 Set 尾部。
// arr: Array
merge(arr)

// 对当前配置上下文执行函数。
// handler: Function -> ChainedSet
  // 一个把 ChainedSet 实例作为单个参数的函数
batch(handler)

// 条件执行一个函数去继续配置
// condition: Boolean
// whenTruthy: Function -> ChainedSet
  // 当条件为真,调用把 ChainedSet 实例作为单一参数传入的函数
// whenFalsy: Optional Function -> ChainedSet
  // 当条件为假,调用把 ChainedSet 实例作为单一参数传入的函数
when(condition, whenTruthy, whenFalsy)

被标记为ChainedSet的属性

config
  .entry('app') // 入口文件名称为 app
    .add('./src/main.js') // 入口文件为 ./src/main.js
config.resolve.modules
  .add('node_modules')
  .prepend('node_modules')
config.resolve
  .extensions // 将数组的元素追加到 extensions 中
    .merge(['.mjs', '.vue', '.scss', '.sass', '.jsx']) // 以数组的形式同时添加多个
    .end() // 回到 resolve API 层级
  .mainFields
    .add('main') // 一个一个添加
    .add('browser')
    .end()
  .mainFiles
    .prepend('main') // 添加到 mainFiles 的第一项
config.devServer.allowedHosts
  .add('subdomain.host.com')
  .prepend('subdomain2.host.com')
  .clear()
上一篇下一篇

猜你喜欢

热点阅读