过滤并循环遍历JavaScript对象数组

过滤并循环遍历JavaScript对象数组,javascript,Javascript,我有这组数据。按每个“通道”过滤并使用该集合的最佳方式是什么? 例如,我想找出通道1的最小和最大顺序,然后做一些事情,然后是通道2。。。做点什么等等 目前,我正在使用类似的方法获取所有数据的最小和最大坐标 var data= [ {"area":"1","location":"01051A","aisle":"1","sequence":12354,"x":13,"y":1338}, {"area":"1","location":"01071A","aisle":"1","sequence":1

我有这组数据。按每个“通道”过滤并使用该集合的最佳方式是什么? 例如,我想找出通道1的最小和最大顺序,然后做一些事情,然后是通道2。。。做点什么等等

目前,我正在使用类似的方法获取所有数据的最小和最大坐标

var data= [
{"area":"1","location":"01051A","aisle":"1","sequence":12354,"x":13,"y":1338},
{"area":"1","location":"01071A","aisle":"1","sequence":12355,"x":13,"y":1437},
{"area":"1","location":"01081A","aisle":"1","sequence":12356,"x":173,"y":1437},
{"area":"1","location":"02021A","aisle":"2","sequence":12473,"x":401,"y":1092},
{"area":"1","location":"02022A","aisle":"2","sequence":12472,"x":401,"y":1140},
{"area":"1","location":"02031A","aisle":"2","sequence":12471,"x":241,"y":1191},
{"area":"1","location":"02032A","aisle":"2","sequence":12470,"x":241,"y":1239},
{"area":"1","location":"02041A","aisle":"2","sequence":12469,"x":401,"y":1191},
{"area":"1","location":"02042A","aisle":"2","sequence":12468,"x":401,"y":1239},
{"area":"1","location":"03101A","aisle":"3","sequence":12476,"x":629,"y":1437},
{"area":"1","location":"03102A","aisle":"3","sequence":12477,"x":629,"y":1485},
{"area":"1","location":"03111A","aisle":"3","sequence":12478,"x":469,"y":1536},
{"area":"1","location":"03112A","aisle":"3","sequence":12479,"x":469,"y":1584}
]
但我还需要找到每个集合的最小值、最大值和,这样我就可以在屏幕上获得坐标和绘制标签

我在考虑循环,然后创建一个独特的通道阵列,然后再次循环数据,但我认为会有更好的方法


这是我正在处理的问题。

您可以使用一个对象来收集
过道
x
y
及其
min
max

var数据=[{区域:“1”,位置:“01051A”,通道:“1”,顺序:12354,x:13,y:1338},{区域:“1”,位置:“01071A”,通道:“1”,顺序:12355,x:13,y:1437},{区域:“1”,位置:“01081A”,通道:“1”,顺序:12356,x:173,y:1437},{区域:“1”,位置:“0201A”,通道:“2”,顺序:12473,x:401,y:1092},{区域:“1”,位置:“0202A”,走道:“2”,顺序:12472,x:401,y:1140},{区域:“1”,位置:“02031A”,走道:“2”,顺序:12471,x:241,y:1191},{区域:“1”,位置:“02032A”,走道:“2”,顺序:12470,x:241,y:1239},{区域:“1”,位置:“02041A”,走道:“2”,顺序:12469,x:401,y:1191},{区域:“1”,位置:“02042A”“,走道:“2”,顺序:12468,x:401,y:1239},{区域:“1”,位置:“03101A”,走道:“3”,顺序:12476,x:629,y:1437},{区域:“1”,位置:“03102A”,走道:“3”,顺序:12477,x:629,y:1485},{区域:“1”,位置:“03111A”,走道:“3”,顺序:12478,x:469,y:1536},{区域:“1”,位置:“03112A”,走道:“3”,序列号:12479,x:469,y:1584}],
values=Object.create(null);
data.forEach(函数(o){
如果(!值[o.过道]){
值[o.y]={x:{min:o.x,max:o.x},y:{min:o.y,max:o.y};
返回;
}
['x','y'].forEach(函数(k){
['min','max'].forEach(函数(m){
数值[o.ranged][k][m]=数学[m](数值[o.ranged][k][m],o[k]);
});
});
});
console.log(值)

.as console wrapper{max height:100%!important;top:0;}
我还建议将任何设置为对象键的“过道”与该过道uniq键分组,其中值将包含对象数组(该集合),该数组将根据您的需求进行排序/排序,例如x+y之和等等。

这是使用array.reduce的另一种风格

 var minX = Math.min.apply(null, data.map(function(a){return a.x;})),
 maxX = Math.max.apply(null, data.map(function(a){return a.x;})),
   minY = Math.min.apply(null, data.map(function(a){return a.y;})),
   maxY  = Math.max.apply(null, data.map(function(a){return a.y;}));
var数据=[{区域:“1”,位置:“01051A”,通道:“1”,顺序:12354,x:13,y:1338},{区域:“1”,位置:“01071A”,通道:“1”,顺序:12355,x:13,y:1437},{区域:“1”,位置:“01081A”,通道:“1”,顺序:12356,x:173,y:1437},{区域:“1”,位置:“0201A”,通道:“2”,顺序:12473,x:401,y:1092},{区域:“1”,位置:“0202A”,走道:“2”,顺序:12472,x:401,y:1140},{区域:“1”,位置:“02031A”,走道:“2”,顺序:12471,x:241,y:1191},{区域:“1”,位置:“02032A”,走道:“2”,顺序:12470,x:241,y:1239},{区域:“1”,位置:“02041A”,走道:“2”,顺序:12469,x:401,y:1191},{区域:“1”,位置:“02042A”“,走道:“2”,顺序:12468,x:401,y:1239},{区域:“1”,位置:“03101A”,走道:“3”,顺序:12476,x:629,y:1437},{区域:“1”,位置:“03102A”,走道:“3”,顺序:12477,x:629,y:1485},{区域:“1”,位置:“03111A”,走道:“3”,顺序:12478,x:469,y:1536},{区域:“1”,位置:“03112A”,走道:“3”,序列号:12479,x:469,y:1584}];
var retData=data.reduce(函数(ret,当前){
ret[current.Roadway]=ret[current.Roadway]|{};
ret[current.roadway]['maxX']=Math.max(ret[current.roadway]['maxX'],current.x)| | current.x;
ret[current.roadway]['maxY']=Math.max(ret[current.roadway]['maxY'],current.y)| | current.y;
ret[current.roadway]['minX']=Math.min(ret[current.roadway]['minX'],current.x)| | current.x;
ret[current.roadway]['minY']=Math.min(ret[current.roadway]['minY'],current.y)| | current.y;
返回ret;
}, {});
console.log(retData)
var aisles = {};

data.forEach(d => {
  if (!aisles[d.aisle]) {
    aisles[d.aisle] = {
      maxX: d.x,
      minX: d.x,
      maxY: d.y,
      minY: d.y
    };
  } else {  
    aisles[d.aisle].maxX = Math.max(aisles[d.aisle].maxX, d.x);
    aisles[d.aisle].minX = Math.min(aisles[d.aisle].minX, d.x);
    aisles[d.aisle].maxY = Math.max(aisles[d.aisle].maxY, d.y);
    aisles[d.aisle].minY = Math.min(aisles[d.aisle].minY, d.y);
  }
})