我需要执行类似于以下用C#编写的操作:
int[] items = { 1, 2, 3, 4, 5, 6, 7 };
var a = items.Skip(2).Take(3);
返回 3,4和5
同样,我需要从对象列表
中跳过记录$scope.myObject = [ { Editable: true, Name: "Daniel Test", Site: "SE100"},
{ Editable: true, Name: "Test new", Site: "SE100"},
{ Editable: false, Name: "Test", Site: "SE100"} ]
我需要跳过第一条记录并取回剩余的记录,这意味着 1-nth 记录
如何使用lodash / underscore进行此操作?
答案 0 :(得分:22)
在Lodash中,first
和rest
函数的行为与Underscore不同。即他们不接受长度论证。而应使用drop
和take
:
const a = _.take(_.drop(items, skipCount), takeCount);
// or
const a = _(items).drop(skipCount).take(takeCount).value();
答案 1 :(得分:21)
var a = _.first( _.rest(items, 2), 3);
并依靠它可以用来跳过第一条记录:
$scope.allButTheFirst = _.rest( $scope.myObject, 1)
链接可以用来使语句更加令人愉悦,从而提高透明度:
var a = _.chain(items)
.rest(2)
.first(3)
.value();
正如在@ RhysvanderWaerden的回答中指出的那样,当使用lodash时,请使用drop
代替first
和take
代替rest
。
答案 2 :(得分:17)
在lodash v3中您可以使用slice和take方法。作为替代方案您可以使用数组方法slice
var offset = 2;
var limit = 3;
var items = [1, 2, 3, 4, 5, 6, 7];
var result1 = _(items).slice(offset).take(limit).value();
var result2 = items.slice(offset, offset + limit);
document.getElementById('result1').innerText = result1.toString();
document.getElementById('result2').innerText = result2.toString();

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>
<pre>
lodash v3: <span id="result1"></span>
vanila JS: <span id="result2"></span>
</pre>
&#13;
答案 3 :(得分:5)
有了这个
const skip = 0;
const take = 40;
你可以这样做
return _.slice(items, skip, skip + take);
或者只使用原生js
items.slice(skip, skip + take);
答案 4 :(得分:1)
/* PAGINATION WITH SORTING AND PAGING */
const page = 1; // input page, min value 1
const limit = 2; // input limit min value 1
/* INPUT ARRAY */
const array = [
{ Editable: true, Name: "Daniel Test", Site: "SE100"},
{ Editable: true, Name: "Test new", Site: "SE100"},
{ Editable: false, Name: "Test", Site: "SE100"},
];
/* PAGINATION WITH SORTING AND PAGING */
const result = _(array)
.orderBy(['Name'], ['asc']) // sort by ascendind
.drop((page - 1) * limit) // page in drop function starts from 0
.take(limit) // limit 2
.value();
console.log(result);
console.log(JSON.stringify(result));
/*
RESULT:
limit 2
sort by ascendind
[
{
"Editable":true,
"Name":"Daniel Test", // name sorted by ascendind
"Site":"SE100"
},
{
"Editable":false,
"Name":"Test",
"Site":"SE100"
}
]
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.6/lodash.min.js"></script>
答案 5 :(得分:-1)
您可以使用_.chunk(array,count)
。
只要通过计数,你将得到所有数组的数量大小数组,然后传递值,然后摇滚。+ 1