繁体   English   中英

按顺序将 ARRAY 拆分为块

[英]Split ARRAY into chunks as they appear in sequence

我得到了一个对象数组,我需要将它们按顺序分成三个块,因为它们在原始数组中。 例如。

let arr = [{1},{2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}];

这个数组需要像这样拆分:

let newArray = {a:[{1},{4},{7},{10},...}], b:[{2},{5},{8}], c:[{3},{6},{9}]};

reduce可以根据索引在其插槽上分配每个值

因为您需要a,b,c而不是0,1,2 ,所以这里需要一个小映射mapNumLetter

 let arr = ["{1}","{2}", "{3}", "{4}", "{5}", "{6}", "{7}", "{8}", "{9}", "{10}"]; // let newArray = {a:[{1},{4},{7},{10},...}], b:[{2},{5},{8}], c:[{3},{6},{9}]}; const mapNumLetter = { 0:"a", 1:"b", 2:"c" } const newArray = arr.reduce((acc,cur,i) => { acc[mapNumLetter[i%3]].push(cur); return acc },{a:[],b:[],c:[]}) console.log(newArray)

(因为{1}, {2} ... 不是有效对象,我将它们更改为文字"{1}", "{2}" ...)

{1} 不是有效的 js 结构

假设 arr 是一个对象数组,您可以:

  • 使用String.fromCharCode(current + 97)生成滚动字符索引
  • 使用对象拥有 char 索引

 let arr = [{name:1},{name:2}, {name:3}, {name:4}, {name:5}, {name:6}, {name:7}, {name:8}, {name:9}, {name:10}]; function transform(theArray, chunkValue) { let finalObject = {}; let current = 0; let currentIndex; theArray.forEach(element => { currentIndex = String.fromCharCode(current + 97); if (!finalObject[currentIndex]) { finalObject[currentIndex] = []; } finalObject[currentIndex].push(element); current++; if (current === chunkValue) { current = 0; } }); console.log(finalObject); return finalObject; } transform(arr, 3);

也许这种方法会很有用

 const data = [{1:1}, {2:2}, {3:3}, {4:4}, {5:5}, {6:6}, {7:7}, {8:8}, {9:9}, {10:10}]; const chunk = (arr, n) => arr.length ? [arr.slice(0, n), ...chunk(arr.slice(n), n)] : []; const chunks = chunk(data, 3); const rotated = chunks[0].map((_, colIndex) => chunks.map(row => row[colIndex])); const result = rotated.map((arr, index) => ({ [index]: arr.filter(Boolean) })); console.log(result);
 .as-console-wrapper{min-height: 100%!important; top: 0}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM