Javascript 让concat处理类似数组的对象

Javascript 让concat处理类似数组的对象,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,有些地方我将数组更改为类似数组的对象,如下所示: let arr = ['a','b'] let arrLike = {...arr, length: arr.length} console.log(arrLike) > {0: "a", 1: "b", length: 2} 它并不完美,但这允许我使用合并来覆盖数组。即: > let a1 = [1,2,3], b1 = [1,2,3] > Object.assign(a1, arr) [ 'a', 'b', 3 ] >

有些地方我将数组更改为类似数组的对象,如下所示:

let arr = ['a','b']
let arrLike = {...arr, length: arr.length}
console.log(arrLike)
> {0: "a", 1: "b", length: 2}
它并不完美,但这允许我使用合并来覆盖数组。即:

> let a1 = [1,2,3], b1 = [1,2,3]
> Object.assign(a1, arr)
[ 'a', 'b', 3 ]
> Object.assign(b1, arrLike)
[ 'a', 'b']
这是可取的,但我也希望concat能够工作

['z'].concat(arr)
> ["z", "a", "b"] // good
['z'].concat(arrLike)
> ["z", {0: "a", 1: "b" length: 2}] // bad
是否需要修改
arrLike
,以使concat工作?

您需要定义告诉
concat()
将其视为数组:

arrLike[Symbol.isConcatSpreadable] = true;
例如:

让arr=['a','b'];
设arrike={
……啊,
长度:arr.length,
[Symbol.isConcatSpreadable]:真
};

console.log(['z'].concat(arrLike))
为了将类似数组的对象转换为真正的数组,请将数组的
slice
方法与函数的
call
结合使用:
array.prototype.slice.call(arrLike)
@hindsmost:这不是他想要的。你是如何找到这个的?@lonewarrior556:通过搜索
concat