2017-08-25 59 views
-2

使用对象包含数组。将数组拆分为基于属性顺序的块

它看起来像这样:

[{id:2},{id:3},{id:4},{id:9},{id:10},{id:11}] 

因此,我想这样的:

[{id:2,id:4},{id:9,id:11}] 

不知道如何删除中间值(正弦他们是连续的),怎么分开呢当我们没有id时:5,6,7,8,意味着序列中有空位。

+3

什么是后面所期望的结果的逻辑? – codtex

+0

我写我想要的结果。删除中间值,并分开到2个对象 –

+2

这甚至没有意义: 因此,您有两个对象具有两次相同的密钥。 –

回答

1

如果我理解正确,您希望将输入拆分为其中每个部分都具有连续值为id的对象的部分,然后仅在每个部分中包含该序列的第一个和最后一个对象。

,你可以做如下:

var input = [{id:2},{id:3},{id:4},{id:9},{id:10},{id:11},{id:15},{id:16},{id:17},]; 
 

 
var result = input.reduce ((acc, obj, i) => { 
 
    if (i && input[i-1].id === obj.id - 1) { 
 
     acc.last[1] = obj; 
 
    } else { 
 
     acc.push(acc.last = [obj]); 
 
    } 
 
    return acc; 
 
}, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

输入可以是这个var input = [{id:2},{id:3},{id:4},{id:9},{id:10},{ ID:11},{ID:15},{ID:16},{ID:17},];我想要分组。 –

+0

这就是这个答案。你测试过了吗?我只是把这些数据放在代码片段中。运行。 – trincot

+0

请等待,现在测试 –

0


可以遍历数组和对象添加到新的数组,如果它符合您的条件。

var arrNew = []; 
for(int i=0;i<arr.length;i++){ 
    var obj = arr[i]; 
    if(obj.id ==2 || obj.id==100){ 
     conitnue; 
    } 
    arrNew.push(obj); 
} 
0

您可以将它归为id并为左边的属性采用不同的键。

var array = [{ id: 2 }, { id: 3 }, { id: 4 }, { id: 9 }, { id: 10 }, { id: 11 }], 
 
    result = array 
 
     .reduce(function (r, a) { 
 
      var last = r[r.length - 1]; 
 
      if (last && last.right + 1 === a.id) { 
 
       last.right = a.id; 
 
      } else { 
 
       r.push({ left: a.id, right: a.id }); 
 
      } 
 
      return r; 
 
     }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }