【问题标题】:JS Object Array PaginationJS对象数组分页
【发布时间】:2015-05-04 16:33:05
【问题描述】:

我需要一些帮助来将 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

但是如你所见,我的数组不同。

【问题讨论】:

  • Array.prototype.map 和模 % 5
  • 它不是重复的。但我已经得到了答案,谢谢 Francodi。还有 albciff,你是无知的。

标签: javascript pagination


【解决方案1】:

这只是一个简单的演示,说明如何使用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 个项目填充它。

【讨论】:

    【解决方案2】:

    参考:

      max=5,j=0;
      for(var i=0;i<musicItems.length;i=i+max){
            j++;
           sets['set' + j] = musicItems.offset(i).max(max);
      }
    

    说明

    分页概念依赖于两个参数:

    1. 偏移量:
    2. 最大:

    然后:

    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 });
     };
    

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 1970-01-01
      • 2022-01-22
      • 2020-10-15
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2017-12-08
      • 2017-06-21
      相关资源
      最近更新 更多