如果arr = [1, 2, 3, 4]
一切都很好。
var arr = [1, 2, 3, 4];
function range(min, max) {
var startArr = arr.slice(arr.indexOf(min)),
endArr = max < arr.length ? arr.slice(0, arr.indexOf(max) + 1) : [];
return startArr.concat(endArr);
}
range(3,1);
但是如果arr = [{id:1, name: "John"}, {id:2, name: "Mark"}, {id:3, name: "Jim"},{id:4, name: "Bob"}]
此代码不起作用。
答案 0 :(得分:0)
考虑使用&#39; lodash&#39; javascript库https://lodash.com/
对于&#39;数组&#39;
听起来像是在追求
答案 1 :(得分:0)
这是因为你的函数的indexOf()
部分正在根据值查找索引。在您的第一个数组中,有一些值为3
和1
的元素,但第二个是一个对象数组,所以很明显它无法正确找到它们。而是简单地使用给定的直接索引。使用max,min
的值作为索引本身。请注意,索引来自0 .. n-1
而不是1 .. n
。那么range(3,1)
就是range(2,0)
(,如果您想将其用作range(3,1)
,只需从函数中的值中减去1):
function range(min, max) {
var startArr = max >= min ? arr.slice(min, max + 1) : arr.slice(min),
endArr = max < min ? arr.slice(0, max + 1) : [];
return startArr.concat(endArr);
}
...
range(2, 0);