如何分组和分离数组对象

时间:2020-07-01 14:07:07

标签: javascript arrays

如何对来自服务器的数组的对象进行分组和分离。像这样的数组: (MOVINGSTATE s表示停止并m移动。XPOINT和YPOINT表示汽车的纬度和经度。)

[{MOVINGSTATE: "s",XPOINT:53.9172866,YPOINT: 26.518275},
{MOVINGSTATE: "s",XPOINT: 53.9172866,YPOINT: 26.518275},
{MOVINGSTATE: "m",XPOINT: 54.0215383,YPOINT: 26.5275599},
{MOVINGSTATE: "m",XPOINT: 54.0102666,YPOINT: 26.4989583},
{MOVINGSTATE: "s",XPOINT: 54.0016599,YPOINT: 26.5478316},..]

我想如果某些MOVINGSTATE连续的s转到新数组,并且当MOVINGSTATE更改为m时转到新数组,然后再次MOVINGSTATE更改为{{ 1}} 转到新数组。所有另一个主数组的新数组对象。 我使用loadash

s

但输出此:

var aaa = _loadash.groupBy(props,'MOVINGSTATE')

我想要这样的p粉

{m:Array(2),s:Array(3)}

如何感谢您的帮助

1 个答案:

答案 0 :(得分:1)

尝试一下:

let arr = 
[{MOVINGSTATE: "s",XPOINT:53.9172866,YPOINT: 26.518275},
{MOVINGSTATE: "s",XPOINT: 53.9172866,YPOINT: 26.518275},
{MOVINGSTATE: "m",XPOINT: 54.0215383,YPOINT: 26.5275599},
{MOVINGSTATE: "m",XPOINT: 54.0102666,YPOINT: 26.4989583},
{MOVINGSTATE: "s",XPOINT: 54.0016599,YPOINT: 26.5478316}];

  let result =  arr.reduce( (accumulator, cur) => {
    const key = cur["MOVINGSTATE"];
    const keyExists = accumulator.find(obj => obj.key === key);
    if (!keyExists) {
      accumulator.push({key,value:[cur]});
      return accumulator;      
    } else if(accumulator[accumulator.length -1] && accumulator[accumulator.length -1].key === key){
        accumulator[accumulator.length -1].value.push(cur);
        return accumulator;
    } else {
      accumulator.push({key,value:[cur]});
      return accumulator; 
    }
        
  }, [])
  .map(obj => obj.value)