gpt4 book ai didi

没有复制的 JavaScript 子数组?

转载 作者:数据小太阳 更新时间:2023-10-29 05:07:48 26 4
gpt4 key购买 nike

我看到的所有创建子数组的文档都在谈论 slice,它创建数组的副本。我想知道是否可以在不复制的情况下创建一个数组的切片,以便修改切片会修改原始数组。例如:

var foo = [1, 2, 3, 4, 5];
var bar = foo.subarray(2, 4);
console.log(bar); // [2, 3, 4]
bar[0] = 'hello, world';
console.log(bar); // ['hello, world', 3, 4]
console.log(foo); // [1, 'hello, world', 3, 4, 5]

最佳答案

不幸的是,@Derek 的回答需要 O(n)创建长度为 n 的子数组,而我们可以在 O(1) 中做到这一点如果我们使用 subarray.get(i) 访问值而不是 subarry[i] :

function make_subarray (array, from, to) {
return {
get: function (i) {
return array[i+from]
},
length: to - from
}
}

你可以这样使用:

for (var i=0; i<subarray.length; i++) {
subarray.get(i)
}

或者您可以添加 map()功能到subarray定义:

function make_subarray (array, from, to) {
return {
...
map: function (f) {
for (var i=0; i<this.length; i++)
f(this.get(i))
}
...
}
}

每次调用 Object.defineProperty(...{get: ...})在 Derek 的回答中,在现代浏览器中速度很慢,所以最好避免做太多。

关于没有复制的 JavaScript 子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24065411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com