背景
为了让一个对象数组按照某个属性分成几份,很快的会写出来这样的代码:
// arr 是对象数组
filterProductsByType () {
let container = new Array(productType.length).fill([])
return arr.reduce((t, c) => {
switch (c.type) {
case productType.CIGATETTE:
t[productType.CIGATETTE].push(c)
break
case productType.YOUXUAN:
t[productType.YOUXUAN].push(c)
break
case productType.GROUP_BUY:
t[productType.GROUP_BUY].push(c)
break
case productType.NORMAL:
t[productType.NORMAL].push(c)
break
default:
t[productType.NORMAL].push(c)
break
}
return t
}, container)
但是实际上这段代码是不能正常工作的。运行起来发现container里面的每个数组的内容项都是一样的!
因此可以推测container的每个数组项是一个数组的引用…
所以,如果用fill()一个对象会存在引用关系…
不能这么做,那就只能手动初始化container对象了