JS 对象数组分页
JS Object Array Pagination
我需要一些帮助 manipulating/paginating 一个 JS 数组对象 5:
var musicItems = [
["assets/audio/1.wav"],
["assets/audio/2.wav"],
["assets/audio/3.wav"],
["assets/audio/4.wav"],
["assets/audio/5.wav"],
["assets/audio/6.wav"],
["assets/audio/7.wav"],
["assets/audio/8.wav"],
];
我想知道JS中集合的数量(2)以及哪些元素属于哪个集合(set1->1-5, set2->6-8)。感谢任何帮助。
编辑
我想做类似 Split array into chunks
的事情
但是如您所见,我的数组不同。
这只是一个关于如何使用 modulo
运算符 %
实现此目的的简单演示。将会有更高效和更小的解决方案。
var musicItems = [
["assets/audio/1.wav"],
["assets/audio/2.wav"],
["assets/audio/3.wav"],
["assets/audio/4.wav"],
["assets/audio/5.wav"],
["assets/audio/6.wav"],
["assets/audio/7.wav"],
["assets/audio/8.wav"],
];
var sets = new Object();
var set = new Array();
var setCounter = 0;
for(var i = 0; i < musicItems.length; i++) {
set.push(musicItems[i]);
if((i + 1) % 5 == 0 || (i + 1) >= musicItems.length) {
setCounter++;
sets['set' + setCounter] = set;
set = new Array();
}
}
console.log(sets['set1']);
console.log(sets['set2']);
基本上,它所做的是遍历 musicItems,我们使用模 %5 检查当前项目是否可以不间断地除以 5,所以当我们收集了 5 个项目时,我们知道一组是完整的。然后我们将集合添加到整体集合对象中,以便稍后将其用作字典(如 'set1'、'set2' 等所希望的那样),我们清除当前集合,用下一个 n 填充它-5 项。
Bref :
max=5,j=0;
for(var i=0;i<musicItems.length;i=i+max){
j++;
sets['set' + j] = musicItems.offset(i).max(max);
}
说明
分页概念依赖于两个参数:
- 偏移量:
- 最大值:
然后:
musicItems.offset(0).max(5) ; // 1st set
// > [ ["assets/audio/1.wav"],["assets/audio/2.wav"],["assets/audio/3.wav"],["assets/audio/4.wav"],["assets/audio/5.wav"] ]
musicItems.offset(0+5).max(5) ; // second set
// > [ ["assets/audio/6.wav"],["assets/audio/7.wav"],["assets/audio/8.wav"] ]
必填 API :
Array.prototype.max = function(mx) {
return this.filter(function(e,i){return i < mx;}); }
};
Array.prototype.offset=function(os){
return this.filter(function(e,i){return i> os-1 });
};
我需要一些帮助 manipulating/paginating 一个 JS 数组对象 5:
var musicItems = [
["assets/audio/1.wav"],
["assets/audio/2.wav"],
["assets/audio/3.wav"],
["assets/audio/4.wav"],
["assets/audio/5.wav"],
["assets/audio/6.wav"],
["assets/audio/7.wav"],
["assets/audio/8.wav"],
];
我想知道JS中集合的数量(2)以及哪些元素属于哪个集合(set1->1-5, set2->6-8)。感谢任何帮助。
编辑 我想做类似 Split array into chunks
的事情但是如您所见,我的数组不同。
这只是一个关于如何使用 modulo
运算符 %
实现此目的的简单演示。将会有更高效和更小的解决方案。
var musicItems = [
["assets/audio/1.wav"],
["assets/audio/2.wav"],
["assets/audio/3.wav"],
["assets/audio/4.wav"],
["assets/audio/5.wav"],
["assets/audio/6.wav"],
["assets/audio/7.wav"],
["assets/audio/8.wav"],
];
var sets = new Object();
var set = new Array();
var setCounter = 0;
for(var i = 0; i < musicItems.length; i++) {
set.push(musicItems[i]);
if((i + 1) % 5 == 0 || (i + 1) >= musicItems.length) {
setCounter++;
sets['set' + setCounter] = set;
set = new Array();
}
}
console.log(sets['set1']);
console.log(sets['set2']);
基本上,它所做的是遍历 musicItems,我们使用模 %5 检查当前项目是否可以不间断地除以 5,所以当我们收集了 5 个项目时,我们知道一组是完整的。然后我们将集合添加到整体集合对象中,以便稍后将其用作字典(如 'set1'、'set2' 等所希望的那样),我们清除当前集合,用下一个 n 填充它-5 项。
Bref :
max=5,j=0;
for(var i=0;i<musicItems.length;i=i+max){
j++;
sets['set' + j] = musicItems.offset(i).max(max);
}
说明
分页概念依赖于两个参数:
- 偏移量:
- 最大值:
然后:
musicItems.offset(0).max(5) ; // 1st set
// > [ ["assets/audio/1.wav"],["assets/audio/2.wav"],["assets/audio/3.wav"],["assets/audio/4.wav"],["assets/audio/5.wav"] ]
musicItems.offset(0+5).max(5) ; // second set
// > [ ["assets/audio/6.wav"],["assets/audio/7.wav"],["assets/audio/8.wav"] ]
必填 API :
Array.prototype.max = function(mx) {
return this.filter(function(e,i){return i < mx;}); }
};
Array.prototype.offset=function(os){
return this.filter(function(e,i){return i> os-1 });
};