使用对象包含数组。将数组拆分为基于属性顺序的块
它看起来像这样:
[{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,意味着序列中有空位。
使用对象包含数组。将数组拆分为基于属性顺序的块
它看起来像这样:
[{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,意味着序列中有空位。
如果我理解正确,您希望将输入拆分为其中每个部分都具有连续值为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; }
输入可以是这个var input = [{id:2},{id:3},{id:4},{id:9},{id:10},{ ID:11},{ID:15},{ID:16},{ID:17},];我想要分组。 –
这就是这个答案。你测试过了吗?我只是把这些数据放在代码片段中。运行。 – trincot
请等待,现在测试 –
可以遍历数组和对象添加到新的数组,如果它符合您的条件。
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);
}
您可以将它归为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; }
什么是后面所期望的结果的逻辑? – codtex
我写我想要的结果。删除中间值,并分开到2个对象 –
这甚至没有意义: 因此,您有两个对象具有两次相同的密钥。 –