[英]Group array values in group of 3 objects in each array using underscore.js
下面是一个数组,我必须在其中对每个对象中的 3 个值进行分组:
var xyz = {"name": ["hi","hello","when","test","then","that","now"]};
输出应低于数组:
[["hi","hello","when"],["test","then","that"],["now"]]
纯javascript代码:
function groupArr(data, n) {
var group = [];
for (var i = 0, j = 0; i < data.length; i++) {
if (i >= n && i % n === 0)
j++;
group[j] = group[j] || [];
group[j].push(data[i])
}
return group;
}
groupArr([1,2,3,4,5,6,7,8,9,10,11,12], 3);
这是一个简短而简单的解决方案,滥用.push
总是返回1
(和1 == true
)这一事实:
const arr = [0, 1, 2, 3, 4, 5, 6]
const n = 3
arr.reduce((r, e, i) =>
(i % n ? r[r.length - 1].push(e) : r.push([e])) && r
, []); // => [[0, 1, 2], [3, 4, 5], [6]]
另外,这个不需要库,以防有人正在寻找单行纯 JS 解决方案。
这可以通过 lodash _.chunk
覆盖:
var xyz = {"name": ["hi","hello","when","test","then","that","now"]},size = 3; console.log(_.chunk(xyz.name, size));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
嗨,请参考这个https://plnkr.co/edit/3LBcBoM7UP6BZuOiorKe?p=preview 。 用于参考使用 underscore.js 分块分割 javascript 数组
使用下划线你可以做
JS
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.groupBy(data, function(element, index){
return Math.floor(index/n);
});
lists = _.toArray(lists); //Added this to convert the returned object to an array.
console.log(lists);
或
使用链包装器方法,您可以将两个语句组合如下:
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"];
var n = 3;
var lists = _.chain(data).groupBy(function(element, index){
return Math.floor(index/n);
}).toArray()
.value();
您可以使用:
function groupBy(arr, n) { var group = []; for (var i = 0, end = arr.length / n; i < end; ++i) group.push(arr.slice(i * n, (i + 1) * n)); return group; } console.log(groupBy([1, 2, 3, 4, 5, 6, 7, 8], 3));
这是一个基于Avare Kodcu's Answer的curry版本。
function groupBy(groupSize,rtn,item,i)
{
const j=Math.floor(i/groupSize)
!rtn[j]?rtn[j]=[item]:
rtn[j].push(item)
return rtn
}
arrayOfWords.reduce(curry(groupBy,3),[])
我遇到了同样的问题,并提出了使用 vanilla js 和递归的解决方案
const groupArr = (arr, size) => {
let testArr = [];
const createGroup = (arr, size) => {
// base case
if (arr.length <= size) {
testArr.push(arr);
} else {
let group = arr.slice(0, size);
let remainder = arr.slice(size);
testArr.push(group);
createGroup(remainder, size);
}
}
createGroup(arr, size);
return testArr;
}
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(groupArr(data, 3));
>>> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
这是另一个简单的 oneliner,与gtournie 的解决方案非常相似。
array.length / n
。const group = (array, n) =>
new Array(Math.ceil(array.length / n))
.fill(undefined)
.map((el, i) => array.slice(i * n, (i + 1) * n));
var xyz = {"name": ["hi","hello","when","test","then","that","now"]};
group(xyz.name, 3)
给
[["hi","hello","when"],["test","then","that"],["now"]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.