我创建了简单的函数:它有数组作为输入和id。函数假设在给定的想法之前采用所有元素。
function takeBefore(stars, id) {
var taken = [];
for(var i = 0, length = stars.length; i < length; i++) {
if (stars[i].itemId === id) {
break;
}
taken.push(stars[i]);
}
return taken;
}
下面的代码完成了这项工作,但最近我变得有点挑剔。想要摆脱for-loop和一些功能风格。
是否可以使用underscore
或ES5
函数执行相同的工作?
答案 0 :(得分:1)
这种东西通常称为takeWhile
/ dropWhile
。您可以使用布尔迭代器every()
:
function takeWhile(array, predicate) {
var pos = -1;
var all = array.every(function(x, n) {
return (pos = n), predicate(x);
})
return array.slice(0, pos + all);
}
function dropWhile(array, predicate) {
var pos = -1;
var all = array.every(function(x, n) {
return (pos = n), predicate(x);
})
return array.slice(pos + all);
}
a = [1,2,3,4,5,6,7]
b = takeWhile(a, function(x) { return x < 5 }) // 1,2,3,4
b = dropWhile(a, function(x) { return x < 5 }) // 5,6,7
答案 1 :(得分:0)
你可以这样做:
x = [1,2,3,4,5];
x.slice(0, x.indexOf(3));
结果:
[1, 2]