javascript - 根据每个对象的子项的数量将对象数组拆分为更小的数组

标签 javascript

我希望在 lodash 中实现类似于 _.chunk() 函数的功能。 chunk 函数根据原始数组中对象的数量将数组分成相等的部分。

但是,我想根据对象子项的数量将 Javascript 数组拆分成更小的数组。所以新数组可以有不同数量的元素,但每个新数组中子项的数量必须总共为 3(如果有余数,最后一个数组除外)。

比如我想用Javascript来转换这个数组:

[ {name:'John', numberOfPets: 5, 
pets:['petOne', 'petTwo', 'petThree', 'petFour', 'petFive']}, 
{ name:'Andrew', numberOfPets: 5,
pets: ['petSix', 'petSeven', 'petEight', 'petNine', 'petTen']}]

进入这些数组:

[{name: 'John', numberOfPets: 5, pets: ['petOne', 'petTwo', 'petThree']}],

[{name: 'John', numberOfPets: 5, pets: ['petFour', 'petFive']},
{name: 'Andrew', numberOfPets: 5, pets: ['petSix']}],

[{name: 'Andrew', numberOfPets: 5, pets: ['petSeven', 'petEight', 
'petNine']}],

[{name: 'Andrew', numberOfPets: 5, pets: ['petTen']}]

你会注意到每个新数组都有 3 个宠物,除了最后一个数组只有 1 个余数。

如有任何帮助,我们将不胜感激。

最佳答案

我认为这是 BeccaGirl 正在寻找的正确轨道。它可能需要一些重构。

var chunks = function(array, size) {
  var results = [];
  while (array.length) {
    results.push(array.splice(0, size));
  }
  return results;
};

var chunkSize = 3, newArray = [], chunkPets = [];
var oldArray = [ {name:'John', numberOfPets: 5, 
pets:['petOne', 'petTwo', 'petThree', 'petFour', 'petFive']}, 
{ name:'Andrew', numberOfPets: 5,
pets: ['petSix', 'petSeven', 'petEight', 'petNine', 'petTen']}];
var newArray = [];

for(var i=0; i<oldArray.length; i++){
  chunkPets = chunks(oldArray[i].pets, chunkSize);
  for(var j=0; j<chunkPets.length; j++)
  {
    if(chunkPets[j].length === chunkSize || i+1 === oldArray.length)
    {
   newArray.push([{name: oldArray[i].name, numberOfPets: oldArray[i].numberOfPets, pets: chunkPets[j]}]);
    }
    else{
       var tempArray = [];
       tempArray.push({name: oldArray[i].name, numberOfPets: oldArray[i].numberOfPets, pets: chunkPets[j]});
       
       if(oldArray.length > i+1){
       tempArray.push({name: oldArray[i+1].name, numberOfPets: oldArray[i+1].numberOfPets, pets: oldArray[i+1].pets.splice(0,chunkSize - chunkPets[j].length)});
       
       oldArray[i+1].pets = oldArray[i+1].pets.splice(chunkSize -chunkPets[j].length-1,oldArray[i+1].pets.length);
       newArray.push(tempArray);
       }
    }
  }
}

console.log(newArray);

关于javascript - 根据每个对象的子项的数量将对象数组拆分为更小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831604/

相关文章:

javascript - 为什么 Number.parseInt 和 global 的 parseInt 不同?

javascript - 访问对象的随机属性

javascript - CasperJS 未加载页面

javascript - 奇怪的 jQuery Ajax 问题

JavaScript - 如何增加记录中数据的计数器

javascript - 使用触发器 "click"下载附加到 <a> 的多个 CSV 文件不起作用

javascript - 如何将 JS 对象数组与现有的不可变 JS 有序映射结合起来?

javascript - JS 根据用户输入禁用按钮

javascript - 如何在悬停时停止眨眼

javascript - "debug = require(' debug') ('api:server' )"是什么意思