2016-07-15 50 views
0

我有一个array of example data,我试图将其分成两列,然后对数据进行分页。

基本上,我建立一个目录列表,并需要显示两列数据。

如果页面1的数据太长,它会将数据拆分成另一个数组并显示在另一个页面上。

的目录列表显示在一行tenantNamesuiteNumber然后如果includeOccupants = Y,会列出occupant阵列tenantName下方。

显示此数据时出现问题。每列只能有18行,因此如果有22位居民,列表需要打破并显示在下一列。我一起砍了几个解决方案,但没有任何值得发布的例子。

我的一般想法是,我应该使用for循环和for循环内迭代列表,遍历占据数组。使用计数器,为每个租户和乘员增加计数器,如果该数字大于18,则打破循环。我的问题是根据所提供的租户数组创建第二,第三和第四个数据数组。

var DIRECTORY_DATA = '[{"tenantName":"U.S. Trust","suiteNumber":201,"occupants":[""],"includeOccupant":"","floor":2},{"tenantName":"Bank of America","suiteNumber":201,"occupants":[""],"includeOccupant":"","floor":2},{"tenantName":"UBS Financial Services","suiteNumber":250,"occupants":[""],"includeOccupant":"","floor":2},{"tenantName":"Summit Advisory Group","suiteNumber":300,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"Beechler Tomberlin, PLLC.","suiteNumber":305,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"ProfitStarts, A Jack Henry Company","suiteNumber":310,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"Nagle & Associates","suiteNumber":320,"occupants":["Carl B. Nagel","Tom Williams","Kenneth Allen","E. Lee Hicks, Jr.","Thomas R. Gladden, Jr.","David Carr"],"includeOccupant":"Y","floor":3},{"tenantName":"Reginald F. Combs, P.C.","suiteNumber":330,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"MetLife","suiteNumber":340,"occupants":["","Bridges Wealth Management","Creative Group Management"],"includeOccupant":"Y","floor":3},{"tenantName":"Baird Private Wealth Management","suiteNumber":350,"occupants":["","Jon Bolton","Steve Rowell","Scott Wray","Jeff Trollinger","Karver Bolton"],"includeOccupant":"Y","floor":3},{"tenantName":"Novant Asset Management Company","suiteNumber":400,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Movement Mortgage LLC","suiteNumber":410,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Merrill Lynch","suiteNumber":430,"occupants":["Matthew Bee","Berverly Burke, CRPC ®","Christy Campbell","Todd H. Chase","Forrest C. Childers, CFP®","Kelly Dwyer","Michael E. Forsyth, CRPC®","Vance L. Horner II, CFA","Robert Hunt","Carlyle Kinlaw. CFA","Brett C. Ledgerwood","Vicky Leonard","Robert P. Maltzahn","Lucia J. Marshall, CFP®","Adolfo John (A.J.) Montesa II, CRPC®","Nathan A. Moser","David L. Neugent, CFP®","J. Keith Norman, CIMA®, CFP®","Elias H. Pegram, Jr.","Lorie Pilon","Brad Pitts, CFP®","E. Lee Raymer","John C. Setzer, Residnet Direcotr","JoBeth P. Souza, CRPC®","William C. Taylor","Marcia Turnage","Tammy Watts-Quesinberry","Robert P. Whaling, Jr. ","Scott K. Young, CRP®"],"includeOccupant":"Y","floor":4},{"tenantName":"Baird Institutional Fixed Income","suiteNumber":440,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Metcalf & Beal, Attorneys at Law","suiteNumber":450,"occupants":["W. Eugene Metcalf","Christopher L. Beal","Lauren M. Vocci"],"includeOccupant":"Y","floor":4},{"tenantName":"Iri","suiteNumber":460,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Nelson, Mullins, Riley, Scarborough, LLP. Attorneys at Law","suiteNumber":530,"occupants":["Cassie L. Crawford","Candace S. Friel","Denise M. Gunter","Donald R. Pocock","Mark A. Stafford"],"includeOccupant":"Y","floor":5},{"tenantName":"Oppenheimer & Co., Inc. ","suiteNumber":560,"occupants":["","William P. Greathouse, Jr. ","Tanner G. Robinson","Gregory Scotiniadis","Eugene Gray Smith","Jerry E. Smith"],"includeOccupant":"Y","floor":5},{"tenantName":"Bowen, Hanes & Company, Inc.","suiteNumber":570,"occupants":[""],"includeOccupant":"","floor":5},{"tenantName":"Wells Fargo Advisors","suiteNumber":600,"occupants":["Alex Galloway","Allen Gillespie","Cyndi Gross","Clay Canady","Conrad Graham","Daniel Choplin","Danny Riazzi","Ed Irvin","Fronie Martin","Janet Sidden","Jim Kluttz","Joe Rhyne","John Bates","John Cox","John Martin","Keary Didier","Larry Hand","Mike Dowell ","Neal Robinson","Pat Crowley","Pat Riazzi","Paul Glenn","Robert Nichols","Scott Settelen","Stacy Dillion","Sterling Swaim","Tim Barnes","Todd Lynch","Tom Goodson","Wes Perry ","Will Goodson"],"includeOccupant":"","floor":6},{"tenantName":"John W. Burress","suiteNumber":610,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Paul Fulton","suiteNumber":610,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Liipfert Law Group","suiteNumber":620,"occupants":["B. Bailey Liipfert, III","J. Benjamin Limehouse"],"includeOccupant":"Y","floor":6},{"tenantName":"Wells Law, PLLC.","suiteNumber":640,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Goodson & Nichols Financial Group","suiteNumber":650,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Allman, Spry, Davis, Leggett & Crumpler P.A. Attorneys & Legal Counsel","suiteNumber":700,"occupants":["C. Edwin Allman, III","M. Joseph Allman","Kim R. Bonuomo","T. Terry Crumpler","Joslin Davis","Bernard M. Desrosiers","Jodi D. Hildebran","Scott T. Horn","George D. Humphrey, III","R. Bradford Leggett","Karen B. Malay","George T. Mann","Marsh Prause","Bennett Rainey","Edward E. Raymer","Kayla Sipprell","Donald VonCannon","Anna Warburton Munroe"],"includeOccupant":"Y","floor":7}]'; 

DIRECTORY_DATA = JSON.parse(DIRECTORY_DATA); 

var tenant_count = DIRECTORY_DATA.length; 

SORTED_DATA = DIRECTORY_DATA.sort(function(a, b) { 
    return a.suiteNumber - b.suiteNumber; 
}); 


var line_total = 0; 
var arrays = []; 

var REMAINING_DATA = []; 

for (var tenants in SORTED_DATA) { 
    var tenant = SORTED_DATA[tenants]; 
    if (line_total >= 20) { 
     break; 
    } else { 

     line_total++; 
     array.push({'tenant':tenant.tenantName,'occupants':[]}); 

     if (tenant.includeOccupant === 'Y') { 
      for (var occupants in tenant.occupants) { 
       var occupant = tenant.occupants[occupants]; 
       if (line_total <= 20) { 
        array[tenants].occupants.push(occupant); 
        line_total++; 
       } else { 
        REMAINING_DATA.push({'tenant':tenant.tenantName, 'occupants':[occupant]}) 
       } 
      } 
     } 
    } 
} 

上面的代码不工作,因为我推着东西REMAINING_DATA错误很坦率地说,我认为有更好的方法去这件事了 - 这就是为什么我真的不想发布代码以避免歪曲答案。

至于我正在寻找的结果。

如果有20个租户,两个租户各有10个住户,那就是40个总线。因为我只能有36条总线。这个函数应该占用40条总线,并将它分成两个或更多的阵列,同时保持租户和乘员结构。

+1

请加你尝试了数据和想要的结果和代码。请在此处查看:[mcve] –

+0

在客户端对数组进行分页并不合适,数据必须在服务器端分割并输出以进行分析。但正如你坚持它,所以看看这个:http://stackoverflow.com/questions/7037162/javascript-loops – num8er

+1

@ num8er这是错误的,如果我加载到客户端的一些静态数据。而且我有一张动态表格,我可以在客户端上对它进行排序/分页/过滤,为什么它不正确? – webdeb

回答

0

检查此代码。

在这里,我正在做过滤器来整理不必要的数据。

然后做地图,使数据格式化。

var data = '[{"tenantName":"U.S. Trust","suiteNumber":201,"occupants":[""],"includeOccupant":"","floor":2},{"tenantName":"Bank of America","suiteNumber":201,"occupants":[""],"includeOccupant":"","floor":2},{"tenantName":"UBS Financial Services","suiteNumber":250,"occupants":[""],"includeOccupant":"","floor":2},{"tenantName":"Summit Advisory Group","suiteNumber":300,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"Beechler Tomberlin, PLLC.","suiteNumber":305,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"ProfitStarts, A Jack Henry Company","suiteNumber":310,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"Nagle & Associates","suiteNumber":320,"occupants":["Carl B. Nagel","Tom Williams","Kenneth Allen","E. Lee Hicks, Jr.","Thomas R. Gladden, Jr.","David Carr"],"includeOccupant":"Y","floor":3},{"tenantName":"Reginald F. Combs, P.C.","suiteNumber":330,"occupants":[""],"includeOccupant":"","floor":3},{"tenantName":"MetLife","suiteNumber":340,"occupants":["","Bridges Wealth Management","Creative Group Management"],"includeOccupant":"Y","floor":3},{"tenantName":"Baird Private Wealth Management","suiteNumber":350,"occupants":["","Jon Bolton","Steve Rowell","Scott Wray","Jeff Trollinger","Karver Bolton"],"includeOccupant":"Y","floor":3},{"tenantName":"Novant Asset Management Company","suiteNumber":400,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Movement Mortgage LLC","suiteNumber":410,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Merrill Lynch","suiteNumber":430,"occupants":["Matthew Bee","Berverly Burke, CRPC ®","Christy Campbell","Todd H. Chase","Forrest C. Childers, CFP®","Kelly Dwyer","Michael E. Forsyth, CRPC®","Vance L. Horner II, CFA","Robert Hunt","Carlyle Kinlaw. CFA","Brett C. Ledgerwood","Vicky Leonard","Robert P. Maltzahn","Lucia J. Marshall, CFP®","Adolfo John (A.J.) Montesa II, CRPC®","Nathan A. Moser","David L. Neugent, CFP®","J. Keith Norman, CIMA®, CFP®","Elias H. Pegram, Jr.","Lorie Pilon","Brad Pitts, CFP®","E. Lee Raymer","John C. Setzer, Residnet Direcotr","JoBeth P. Souza, CRPC®","William C. Taylor","Marcia Turnage","Tammy Watts-Quesinberry","Robert P. Whaling, Jr. ","Scott K. Young, CRP®"],"includeOccupant":"Y","floor":4},{"tenantName":"Baird Institutional Fixed Income","suiteNumber":440,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Metcalf & Beal, Attorneys at Law","suiteNumber":450,"occupants":["W. Eugene Metcalf","Christopher L. Beal","Lauren M. Vocci"],"includeOccupant":"Y","floor":4},{"tenantName":"Iri","suiteNumber":460,"occupants":[""],"includeOccupant":"","floor":4},{"tenantName":"Nelson, Mullins, Riley, Scarborough, LLP. Attorneys at Law","suiteNumber":530,"occupants":["Cassie L. Crawford","Candace S. Friel","Denise M. Gunter","Donald R. Pocock","Mark A. Stafford"],"includeOccupant":"Y","floor":5},{"tenantName":"Oppenheimer & Co., Inc. ","suiteNumber":560,"occupants":["","William P. Greathouse, Jr. ","Tanner G. Robinson","Gregory Scotiniadis","Eugene Gray Smith","Jerry E. Smith"],"includeOccupant":"Y","floor":5},{"tenantName":"Bowen, Hanes & Company, Inc.","suiteNumber":570,"occupants":[""],"includeOccupant":"","floor":5},{"tenantName":"Wells Fargo Advisors","suiteNumber":600,"occupants":["Alex Galloway","Allen Gillespie","Cyndi Gross","Clay Canady","Conrad Graham","Daniel Choplin","Danny Riazzi","Ed Irvin","Fronie Martin","Janet Sidden","Jim Kluttz","Joe Rhyne","John Bates","John Cox","John Martin","Keary Didier","Larry Hand","Mike Dowell ","Neal Robinson","Pat Crowley","Pat Riazzi","Paul Glenn","Robert Nichols","Scott Settelen","Stacy Dillion","Sterling Swaim","Tim Barnes","Todd Lynch","Tom Goodson","Wes Perry ","Will Goodson"],"includeOccupant":"","floor":6},{"tenantName":"John W. Burress","suiteNumber":610,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Paul Fulton","suiteNumber":610,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Liipfert Law Group","suiteNumber":620,"occupants":["B. Bailey Liipfert, III","J. Benjamin Limehouse"],"includeOccupant":"Y","floor":6},{"tenantName":"Wells Law, PLLC.","suiteNumber":640,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Goodson & Nichols Financial Group","suiteNumber":650,"occupants":[""],"includeOccupant":"","floor":6},{"tenantName":"Allman, Spry, Davis, Leggett & Crumpler P.A. Attorneys & Legal Counsel","suiteNumber":700,"occupants":["C. Edwin Allman, III","M. Joseph Allman","Kim R. Bonuomo","T. Terry Crumpler","Joslin Davis","Bernard M. Desrosiers","Jodi D. Hildebran","Scott T. Horn","George D. Humphrey, III","R. Bradford Leggett","Karen B. Malay","George T. Mann","Marsh Prause","Bennett Rainey","Edward E. Raymer","Kayla Sipprell","Donald VonCannon","Anna Warburton Munroe"],"includeOccupant":"Y","floor":7}]'; 
 

 
data = JSON.parse(data); 
 
data = data.sort(function(a, b) { 
 
    return a.suiteNumber - b.suiteNumber; 
 
}); 
 

 
var tenantsOccupants = {}; 
 

 
data.forEach(function(item) { 
 
    if(item.includeOccupant !== 'Y') {return;} 
 

 
    if(!tenantsOccupants[item.tenantName]) { 
 
    tenantsOccupants[item.tenantName] = []; 
 
    } 
 
    
 
    item.occupants.forEach(function(occupant) { 
 
    tenantsOccupants[item.tenantName].push(occupant); 
 
    }); 
 
}); 
 

 
console.log(tenantsOccupants);

+0

“乘客”阵列将在这里发挥作用?如果没有居住者阵列,你有什么可以工作。这是我目前的问题。 – KFE

+0

它是分割数据的切片函数,它不是完整的代码,它是分页数组的一个例子。作为@webdev说:尝试Array.slice() – num8er

+0

我正在寻找一种方法来分页数据中有一个子数组。请参阅我正在使用的数据数组。它包括一个'乘客'数组,这就是我的问题出现的地方。我没有问题迭代租户,我的问题是当我迭代租户和租户住户的子阵列时。 – KFE

0

它简单:

定义设置,创建你的页面。

我觉得代码是自解释的

var array = [6,7,8,1,2,3,4,5]; 
 
array.sort() 
 

 
var pages = []; 
 
var page = 0; 
 
var perPage = 3; 
 
var currentIdx = 0; 
 
while(true) { 
 
    currentIdx = perPage * page; 
 
    if (currentIdx >= array.length) break; 
 

 
    pages.push(
 
    array.slice(currentIdx, currentIdx + perPage) 
 
) 
 
    
 
    page++; 
 
} 
 

 
console.log(pages) 
 

 
// Get the occupants.. with suiteNumber 
 

 
var occupants = data.reduce(function(occupantsArray, item) { 
 
    item.occupants.forEach(function(occupant) { 
 
    occupant.suiteNumber = item.suiteNumber; 
 
    occupantsArray.push(occupant) 
 
    }) 
 
}, []) 
 

 
occupants // [{suitNumber: xx, occupantsData..}, {}]

+0

这看起来不错,但对于一个子阵?在你的榜样,说'8'有数据[A,b,C,d] ...你会如何包括的子阵列那数组进入数学? – KFE

+0

这个工作,但它只考虑到主阵列,它不会迭代'乘客'的次级子阵列。我正在寻找一种方式来切租户的主阵列以及居住者的子阵列(如果需要) – KFE

+0

对不起,我不能读你的问题的数据结构,和我以前不认识的子阵列..那么你应该'flatten'数组,然后运行该函数.. – webdeb