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

时间:2014-08-08 22:17:40

标签: javascript arrays clone

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

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

var origArr = [o1, o2, o3, o4, o5];
// origArr .length = 5
var subArr = origArr.slice(1, 4);
// subArr  = [o2, o3, o4];

通常我可以使用切片方法。但这意味着元素被复制到新数组中。因为我想做的就是改变开始和结束索引,有没有简单的方法来做到这一点,而不是每次都创建一个新的副本?我只想使用对原始数组的引用。

感谢您的帮助。

克里斯

1 个答案:

答案 0 :(得分:0)

您无法使用标准JavaScript数组创建数组子集的“视图”。您可以使用新的typed arrays执行此操作,但新类型的数组仅提供各种数字格式的存储。您的变量名称(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