Javascript在创建子数组时使用原始数组

Javascript在创建子数组时使用原始数组,javascript,arrays,clone,Javascript,Arrays,Clone,我是Javascript新手,遇到了以下问题: 我有一个保持不变的对象数组。从这个数组中,我想创建具有不同开始索引和结束索引的子数组 var origArr = [o1, o2, o3, o4, o5]; // origArr .length = 5 var subArr = origArr.slice(1, 4); // subArr = [o2, o3, o4]; 通常我可以使用切片法。但这意味着元素将被复制到新数组中。既然我想做的就是改变开始和结束索引,那么有没有简单的方法可以做到这一

我是Javascript新手,遇到了以下问题:

我有一个保持不变的对象数组。从这个数组中,我想创建具有不同开始索引和结束索引的子数组

var origArr = [o1, o2, o3, o4, o5];
// origArr .length = 5
var subArr = origArr.slice(1, 4);
// subArr  = [o2, o3, o4];
通常我可以使用切片法。但这意味着元素将被复制到新数组中。既然我想做的就是改变开始和结束索引,那么有没有简单的方法可以做到这一点而不必每次创建一个新的副本?我将只使用对原始数组的引用

谢谢你的帮助

Chris

不能使用标准JavaScript数组创建数组子集的“视图”。您可以使用新的类型化数组,但新的类型化数组只为各种数字格式提供存储。变量名(
o1
等)建议使用对象引用

对于标准阵列,可以改用函数:

function subMapper(array, index, length) {
    return function(i, value) {
        if (index + i >= length) {
            // Beyond the end of the array, do what you think is appropriate
        }
        if (arguments.length === 1) {
            // Getting a value
            return array[index + i];
        }
        // Setting a value
        array[index + i] = value;
    };
}

var origArr = [o1, o2, o3, o4, o5];
var subArrMapper = subMapper(origArr, 1, 4);
var x = subMapper(0);
console.log(x === o2); // true

如果要修改原始数组,则必须使用
.pop()
.shift()
。您的意思是修改原始数组吗?您是否正在寻找一个对象,该对象将作为原始数组的视图,因此
origar[2]=0
也将导致
subar[1]
为0?没有什么内置的。您可以为它编写自己的包装器对象,尽管它可能比只使用切片慢。您到底想做什么?你能给我们一个更大的图景吗?我们可以建议一种算法。子数组用作另一个库中函数的参数。当用户更改滑块的值时,所传递的子阵列(时间段)的长度也会更改。因此,传递给函数的数据范围确实发生了变化,但元素保持不变。