如何创建嵌套组通过UnderScore.js

问题描述 投票:0回答:2

我有一个数组,我需要根据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}
]

提前致谢。

javascript arrays underscore.js
2个回答
2
投票

您可以使用发电机功能和.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)

1
投票

使用你可以根本就利用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))
© www.soinside.com 2019 - 2024. All rights reserved.