# 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 } ]