Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对数组的对象进行分组和分离_Javascript_Arrays - Fatal编程技术网

Javascript 如何对数组的对象进行分组和分离

Javascript 如何对数组的对象进行分组和分离,javascript,arrays,Javascript,Arrays,如何对来自服务器的数组对象进行分组和分离。像这样的数组: (MOVINGSTATEs这意味着停止和m移动。XPOINT和YPOINT这意味着汽车的纬度和经度。) 我想知道如果一些MOVINGSTATE连续s转到新数组,当MOVINGSTATE更改为m转到新数组,然后再次MOVINGSTATE更改为s转到新数组。所有这些新数组都是另一个主数组的对象。 我用 但输出如下: {m:Array(2),s:Array(3)} 我想要这样的超能力: [ [ {MOVINGSTATE: "s

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

我想知道如果一些
MOVINGSTATE
连续
s
转到新数组,当
MOVINGSTATE
更改为
m
转到新数组,然后再次
MOVINGSTATE
更改为
s
转到新数组。所有这些新数组都是另一个主数组的对象。 我用

但输出如下:

{m:Array(2),s:Array(3)}
我想要这样的超能力:

[
 [
  {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 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)
[
 [
  {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 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)