Javascript 如何将对象分块成更小的对象

Javascript 如何将对象分块成更小的对象,javascript,ecmascript-6,Javascript,Ecmascript 6,目标是将长度和形状未知的对象分解为小对象,每个小对象包含3个元素。只有香草JS溶液;我不想用u.pick等 大型对象的示例: const data = { someFirstKey: 'someFirstVal', someSecondKey: 'someSecondVal', ... someLastKey: 'someLastVal' } 具有3个键的所需区块: {someKey0: 'someVal0', someKey1: 'someVal1', som

目标是将长度和形状未知的对象分解为小对象,每个小对象包含3个元素。只有香草JS溶液;我不想用u.pick等

大型对象的示例:

const data = {
    someFirstKey: 'someFirstVal',
    someSecondKey: 'someSecondVal',
    ...
    someLastKey: 'someLastVal'
}
具有3个键的所需区块:

{someKey0: 'someVal0', someKey1: 'someVal1', someKey2, 'someVal2'}

好的,这可能不是最有效的方法,但它对我的盒子有效

const data={}//在此处填写数据
常量键=对象。键(数据);//从obj获取钥匙。
const numberOfWholeParts=数学楼层(key.length/3);//或者不管你的尺寸限制是多少
常量余数=keys.length%2;//全部零件填满后留下的钥匙
常量数组部分=[];

for(让i=0;i好,所以这可能不是最有效的方法,但它在我的盒子上工作。)

const data={}//在此处填写数据
常量键=对象。键(数据);//从obj获取钥匙。
const numberOfWholeParts=数学楼层(key.length/3);//或者不管你的尺寸限制是多少
常量余数=keys.length%2;//全部零件填满后留下的钥匙
常量数组部分=[];

对于(让i=0;i根据注释,看起来您实际上在寻找一种方法,将一个对象拆分为几个较小的对象。我将这样处理:

const data={a:1,b:2,c:3,d:4,e:5,f:6,g:7};
const chunk_size=3,chunk=[];
for(const cols=Object.entries(data);cols.length;)
push(cols.splice(0,chunk_size).reduce((o[k,v])=>(o[k]=v,o),{});

console.log(chunks);
根据这些注释,您似乎在寻找一种方法,将一个对象拆分为几个较小的对象。我将这样处理:

const data={a:1,b:2,c:3,d:4,e:5,f:6,g:7};
const chunk_size=3,chunk=[];
for(const cols=Object.entries(data);cols.length;)
push(cols.splice(0,chunk_size).reduce((o[k,v])=>(o[k]=v,o),{});
console.log(块);
使用:

const entries=Object.entries(数据);
常量分组=[];
for(设i=0;iObject.fromEntries(o));
使用:

const entries=Object.entries(数据);
常量分组=[];
for(设i=0;iObject.fromEntries(o));

@VonAxt如果返回项的顺序很重要,则数据不应格式化为对象,而应格式化为数组。如果您总是希望按照示例中的字母顺序对键进行排序,这会使事情变得更容易-您可以拉出键,对它们进行排序,并按顺序获取它们的值。@VonAxt对象键没有位置等等,你的目标是把一个对象分解成几个更小的对象,但你不在乎它是如何分解的,只要每个小对象最多有3个键?这看起来像是一个家庭作业问题。我无法想象有任何有效的商业案例可以在不知道如何分解的情况下将任意数据结构分解成更小的任意数据结构ey组合在一起或可以可靠地反序列化。@VonAxt我同意其他人的看法,数组的情况比对象好得多。但请看我的答案。@VonAxt如果返回项的顺序很重要,则数据不应格式化为对象,而应格式化为数组。如果您总是希望键按字母顺序排序正如在您的示例中,这使事情变得更容易-您可以拉出键,对它们进行排序,并按顺序获取它们的值。@VonAxt对象键没有位置。因此,等等,您的目标是将一个对象拆分为几个较小的对象,但只要每个小对象最多有3个键,您就不在乎它如何拆分了?这看起来像是一个家庭作业问题。我无法想象有任何有效的商业案例可以将任意数据结构分解为更小的任意数据结构,而不知道它们如何组合在一起或如何可靠地反序列化。@VonAxt我同意其他人的看法,对于数组来说,这比对象好得多。但请看我的答案。
const data = {} // fill in your data here
const keys = Object.keys(data); // gets you the keys from your obj. 
const numberOfWholeParts = Math.floor( keys.length / 3 );  // or whatever your size limit is
const remainder = keys.length % 2; // keys left after all whole parts are filled

const arrayOfParts = [];

for(let i=0;i<numberOfWholeParts;i++) {
   const obj = {};
   const keySegment = keys.slice(i*3, i*3+3);

   for(let j=0; j<3; j++) {
     obj[keySegment[j]] = data[keySegment[j]];
   }
   arrayOfParts.push(obj);
} 
if(remainder > 0){
  const obj = {};
  let remainingKeys = keys.slice(-remainder)
  for(let i=0; i<remainingKeys.length;i++) {
    obj[remainingKeys[i]] = data[remainingKeys[i]];
  }
  arrayOfParts.push(obj);
}