我有一个数组,我需要根据size_y他们组;
[
{"col":4,"row":1,"size_x":1,"size_y":4},
{"col":2,"row":2,"size_x":1,"size_y":2},
{"col":1,"row":1,"size_x":3,"size_y":1},
{"col":1,"row":4,"size_x":3,"size_y":1},
{"col":1,"row":5,"size_x":4,"size_y":1}
]
现在,如果size_y是4我希望将小于或等于4的所有行。
[
{"col":4,"row":1,"size_x":1,"size_y":4},
{"col":2,"row":2,"size_x":1,"size_y":2},
{"col":1,"row":1,"size_x":3,"size_y":1},
{"col":1,"row":4,"size_x":3,"size_y":1},
],
[
{"col":1,"row":5,"size_x":4,"size_y":1}
]
提前致谢。
您可以使用发电机功能和.splice()
let arr = [
{"col":4,"row":1,"size_x":1,"size_y":4},
{"col":2,"row":2,"size_x":1,"size_y":2},
{"col":1,"row":1,"size_x":3,"size_y":1},
{"col":1,"row":4,"size_x":3,"size_y":1},
{"col":1,"row":5,"size_x":4,"size_y":1}
];
function* divideBy(a) {
const [copy, [{size_y}] = copy] = [[...a]];
while (copy.length) yield copy.splice(0, size_y);
}
let res = [...divideBy(arr)];
console.log(res)
使用你可以根本就利用reduce纯JS
let arr = [{"col":4,"row":1,"size_x":1,"size_y":4},{"col":2,"row":2,"size_x":1,"size_y":2},{"col":1,"row":1,"size_x":3,"size_y":1}, {"col":1,"row":4,"size_x":3,"size_y":1},{"col":1,"row":5,"size_x":4,"size_y":1}]
let op = arr.reduce((out,inp)=>{
if(inp.row > 4){
if(out['>4']){
out['>4'].push(inp)
} else {
out['>4'] = [inp]
}
}else{
if(out['<4']){
out['<4'].push(inp)
} else {
out['<4'] = [inp]
}
}
return out
},{})
console.log(Object.values(op))