Javascript 根据序列中的属性将数组拆分为块
有一个包含对象的数组 看起来是这样的:Javascript 根据序列中的属性将数组拆分为块,javascript,arrays,Javascript,Arrays,有一个包含对象的数组 看起来是这样的: [{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: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结果=输入。减少((acc、obj、i)=>{
if(i&&input[i-1].id==obj.id-1){
acc.last[1]=obj;
}否则{
acc.push(acc.last=[obj]);
}
返回acc;
}, []);
控制台日志(结果)代码>
.as控制台包装{最大高度:100%!重要;顶部: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);
}
var arrNew=[];
对于(int i=0;i您可以根据id
对其进行分组,并为左和右属性使用不同的键
var数组=[{id:2},{id:3},{id:4},{id:9},{id:10},{id:11}],
结果=数组
.减少(功能(r,a){
var last=r[r.长度-1];
if(last&&last.right+1==a.id){
last.right=a.id;
}否则{
r、 推送({左:a.id,右:a.id});
}
返回r;
}, []);
console.log(结果);
.as控制台包装{最大高度:100%!重要;顶部:0;}
所需结果背后的逻辑是什么?我编写我想要的结果。删除中间值,并将其分离为两个对象。这甚至没有意义:因此,您有两个具有两倍相同键的对象。如果您的输入数组有7个元素,或8个元素,或9个元素,…一般原理是什么?首先将数组一分为二,然后只取fir每个?输入的st和最后一个元素可以是这个var输入=[{id:2},{id:3},{id:4},{id:9},{id:10},{id:11},{id:15},{id:16},{id:17},];我想要对它进行分组。这就是这个答案的作用。你测试了吗?我只是把数据放在代码段中。运行它。结果必须是id:2,id:4-不包括id:3。对不起,我必须纠正这个问题:现在中间的值被删除了。我不确定当一个组中只有一个值时你希望发生什么。比如对于[{id:1},{id:5}]
。那么应该输出什么呢?目前我的答案只会产生:[[{id:1}],{id:5}]