# copyArray
# Description
将 source
的值复制到 array
,这里直接进行了赋值操作,并没有处理引用类型的情况,所以如果为引用类型则为浅拷贝
# Params
(source, array)
# Return
{Array} array
# Code
function copyArray(source, array) {
let index = -1
const length = source.length
array || (array = new Array(length))
while (++index < length) {
array[index] = source[index]
}
return array
}
# Analyze
copyArray
是lodash
内部使用的方法,并没有进行 是否数组的判断 ,在内部使用时可能会尽量避免这个问题- 首先拿到了
source
的length
,定义了index
为 -1 - 进行了
array
的判断,如果array
不存在则new
一个和source
等长的数组 - 使用
while
循环,将source
的值 赋值到array
对应的位置 - 这里并没有判断是否对象等等,所以如果是引用类型会指向同一内存空间
- 使用了
while
,所以对于 稀疏数组 也会进行赋值,值为undefined
# Remark
# Example
const a = [1,2,3,4,5]
const c = [{
a: 1
}]
const b = copyArray(a)
const d = copyArray(c)
c[0].a++
console.log(b) // [ 1, 2, 3, 4, 5 ]
console.log(d) // [ { a: 2 } ]