我有一个数组,它包含一堆值。我希望slice
数组增加count
数字的值或减少count
的值。
计数由next
和prev
按钮更新。当用户点击next
计数增加时,用户点击prev
按钮count
减少。按批号使用此wan到slice
数组值。
这是我的尝试:
var arr = [1,2,3,4,5,6,7,8,9];
var batch = 2;
var num = 2;
var total = arr.length;
var group = arr.slice(0, (batch % total));
var add = function (amount) {
num = (num + total - 1 + amount) % total + (2)
console.log(arr.slice((num-batch), (num % total)))
}
$('a').click(function (e) {
var num = e.target.className == 'prev' ? -1 : 1;
add(num);
})
console.log(group)
答案 0 :(得分:2)
假设您一直在寻找大小为batch
的分组,并希望环绕您的阵列,您可以这样做。
var add = function (amount) {
num = ((num + batch * amount) % total + total) % total;
var out = arr.slice(num, num + batch);
if (out.length < batch) {
out = out.concat( arr.slice(0, batch - out.length ) );
}
console.log(out);
}
请注意,JavaScript %
不是大多数语言中的模运算符,而是余数运算符。不是让你进入[0,m - 1]范围,而是在保留符号(即-6 % 5 = -1
)的同时进入范围[-m + 1,m - 1]。实现真模的一种简单方法是执行((n % m) + m) % m
。