如何通过其中的键值将对象数组拆分成

时间:2018-07-17 10:18:59

标签: javascript arrays

JavaScript。有一个对象数组

0:{mask: "202 203, 287 376, 412 162, 381 121", add: 1}
1:{mask: "108 511, 247 291, 151 186, 97 180", add: 1}
2:{mask: "147 202, 289 234, 268 113", add: 0}
3:{mask: "79 225, 318 374, 443 212, 359 118", add: 1}
4:{mask: "116 253, 327 351, 377 198, 361 171", add: 1}
5:{mask: "232 237, 288 566, 406 481, 458 240, 421 188", add: 0}
6:{mask: "222 391, 361 298, 347 170", add: 0}

需要将它们分成add = 1,然后在下一个add = 0之后,add = 1之前的几个ar1 = [ 0: {mask: "202 203, 287 376, 412 162, 381 121", add: 1} ] ar2 = [ 0: {mask: "108 511, 247 291, 151 186, 97 180", add: 1} 1: {mask: "147 202, 289 234, 268 113", add: 0} ] ar3 = [ 0: {mask: "79 225, 318 374, 443 212, 359 118", add: 1} ] ar4 = [ 0: {mask: "116 253, 327 351, 377 198, 361 171", add: 1} 1: {mask: "232 237, 288 566, 406 481, 458 240, 421 188", add: 0} 2: {mask: "222 391, 361 298, 347 170", add: 0} ] 数组中,并保留这样的顺序

add = 1

它可以是对象数组(内部数组)没关系,主要是带有add = 0的组元素以及所有接下来的xinput --list

元素

1 个答案:

答案 0 :(得分:3)

Reduce可以帮助您,但这是一个技巧。如果您不喜欢reduce,可以采用for循环

const arr = [{mask: "202 203, 287 376, 412 162, 381 121", add: 1},
{mask: "108 511, 247 291, 151 186, 97 180", add: 1},
{mask: "147 202, 289 234, 268 113", add: 0},
{mask: "79 225, 318 374, 443 212, 359 118", add: 1},
{mask: "116 253, 327 351, 377 198, 361 171", add: 1},
{mask: "232 237, 288 566, 406 481, 458 240, 421 188", add: 0},
{mask: "222 391, 361 298, 347 170", add: 0}];

const result = [];

arr.reduce((a,b) => {
  if (a === null || b.add == 1)
    result.push([]);
  result[result.length-1].push(b);
  
  return b
},null)

console.log(result);