const a = [
{
value: '345',
active: true
},
{
value: '456',
active: true
},
{
value: '567',
active: false
},
{
value: 'hello',
active: false
}
];
console.log('第一次的a的值', a);
const b = _.filter(a, (item) => item.active);
const c = _.cloneDeep(b);
console.log('第一次的b的值', b);
b[0].active = false;
console.log('第一次的c的值', c);
/* 总结:lodash的filter函数实际上是引用了原始数组的指针地址,
并不是真的重新构建了一个数组,
所以改变过滤后得到的数组,会导致原始数组改变。
解决办法:可以通过深拷贝(25行)避免这种问题!
应用场景:多联动状态改变机制:从一组状态管理的中转站数组中,过滤出来状态是开着的,然后拿出来做了其他的处理,在处理的过程中,涉及到状态改变的,会直接同步到管理状态机制的中转站中!不需要我们再去更新中转站!
*/
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: ["exuberant", "destruction", "present"]
result.pop();
console.log(result);
// expected output: ["exuberant", "destruction", "present"]
console.log(words);
// expected output: ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']
/* 总结:js的filter函数真的重新构建了一个数组,
所以改变过滤后得到的数组,不会导致原始数组改变。
应用场景:过滤出新数组后,打算删除部分内容,但是不想要删除原始数组!
*/
console