我有var ar =[1,2,3,4,5],想要一些函数getSubarray(数组,fromIndex, toIndex),调用getSubarray(ar, 1,3)的结果是新数组[2,3,4]。
当前回答
对于slice的简单使用,使用我的扩展到数组类:
Array.prototype.subarray = function(start, end) {
if (!end) { end = -1; }
return this.slice(start, this.length + 1 - (end * -1));
};
然后:
var bigArr = ["a", "b", "c", "fd", "ze"];
Test1:
bigArr.subarray(1, -1);
<“b”、“c”、“fd”、“ze”
Test2:
bigArr.subarray(2, -2);
<[“c”、“fd”]
Test3:
bigArr.subarray(2);
<[“c”、“fd”、“ze”]
对于来自其他语言(即Groovy)的开发人员来说可能更容易。
其他回答
这个问题实际上是在要求一个新数组,所以我认为更好的解决方案是将Abdennour TOUMI的答案与克隆函数结合起来:
function clone(obj) { if (null == obj || "object" != typeof obj) return obj; const copy = obj.constructor(); for (const attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy; } // With the `clone()` function, you can now do the following: Array.prototype.subarray = function(start, end) { if (!end) { end = this.length; } const newArray = clone(this); return newArray.slice(start, end); }; // Without a copy you will lose your original array. // **Example:** const array = [1, 2, 3, 4, 5]; console.log(array.subarray(2)); // print the subarray [3, 4, 5, subarray: function] console.log(array); // print the original array [1, 2, 3, 4, 5, subarray: function]
[http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object]
我有var ar =[1,2,3,4,5],想要一些函数 getSubarray(array, fromIndex, toIndex),调用的结果 getSubarray(ar, 1,3)是新数组[2,3,4]。
精确解
function getSubarray(array, fromIndex, toIndex) {
return array.slice(fromIndex, toIndex+1);
}
让我们测试解决方案
let ar = [1, 2, 3, 4, 5]
getSubarray(ar, 1, 3)
// result: [2,3,4]
Array.prototype.slice ()
slice()方法返回数组某部分的浅拷贝 进入一个从开始到结束选择的新数组对象(不包括end) 其中start和end表示该数组中项目的索引。的 原始数组将不会被修改。
基本上,slice让你从数组中选择一个子数组。
例如,让我们以这个数组为例:
Const animals = ['ant', '野牛','camel', 'duck', 'elephant'];
这样做:
console.log(animals.slice(2, 4));
将会得到这样的输出:
// result: ["camel", "duck"]
语法:
slice() // creates a shallow copy of the array
slice(start) // shows only starting point and returns all values after start index
slice(start, end) // slices from start index to end index
参见浅拷贝参考
Const array_one = [11,22,33,44,55]; Const start = 1; Const end = array_one。长度- 1; Const array_2 = array_one。片(开始、结束); console.log (array_2);
看看Array。片(开始、结束)
Const ar = [1,2,3,4,5]; // slice from 1..3 -添加1作为结束索引不包括在内 Const ar2 = ar.slice(1,3 + 1); console.log (ar2);
对于slice的简单使用,使用我的扩展到数组类:
Array.prototype.subarray = function(start, end) {
if (!end) { end = -1; }
return this.slice(start, this.length + 1 - (end * -1));
};
然后:
var bigArr = ["a", "b", "c", "fd", "ze"];
Test1:
bigArr.subarray(1, -1);
<“b”、“c”、“fd”、“ze”
Test2:
bigArr.subarray(2, -2);
<[“c”、“fd”]
Test3:
bigArr.subarray(2);
<[“c”、“fd”、“ze”]
对于来自其他语言(即Groovy)的开发人员来说可能更容易。