Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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 从http响应中形成所需数据对象的正确方法是什么_Javascript_Api_Ecmascript 6 - Fatal编程技术网

Javascript 从http响应中形成所需数据对象的正确方法是什么

Javascript 从http响应中形成所需数据对象的正确方法是什么,javascript,api,ecmascript-6,Javascript,Api,Ecmascript 6,我从一个api调用接收到一个特定的数组,我需要从中形成一个对象数组。这是我从服务器接收的对象数组 [ {x:10,id:1,y:30}, {x:10,id:2,y:50}, {x:11,id:1,y:20}, {x:11,id:2,y:70}, {x:12,id:1,y:80}, {x:12,id:2,y:90} ] 。。。我需要将其转换为: [ {x:10,id1:30,id2:50}, {x:11,id2:20,id2:70}, {x:12,id3:80

我从一个api调用接收到一个特定的数组,我需要从中形成一个对象数组。这是我从服务器接收的对象数组

[
  {x:10,id:1,y:30},
  {x:10,id:2,y:50},
  {x:11,id:1,y:20},
  {x:11,id:2,y:70},
  {x:12,id:1,y:80},
  {x:12,id:2,y:90}
]
。。。我需要将其转换为:

[
  {x:10,id1:30,id2:50},
  {x:11,id2:20,id2:70},
  {x:12,id3:80,id2:90}
]
基本上根据各自的对象存储
y
部件

我试图生成所需的对象,但我不得不使用太多的循环。有更简单或更准确的方法吗?

你可以试试这个

let arr=[ {x:10,id:1,y:30},
  {x:10,id:2,y:50},
  {x:11,id:1,y:20},
  {x:11,id:2,y:70},
  {x:12,id:1,y:80},
  {x:12,id:2,y:90}
]
let ans=[];
arr.forEach(o=>{
    if( !ans.find(i=>o.x===i.x)){
        let temp={x:o.x};
        temp[`id${o.id}`]=o.y;
        arr.filter(item=>(item.x===o.x && item.id!==o.id)).forEach((item,index)=>{
            temp[`id${item.id}`]=item.y;
        })
        ans.push(temp);
}
});
console.log(ans);

谢谢,这是一个令人惊讶的答案,它确实清楚了我的大部分概念,但是如果我们不知道id呢。也就是说,应用if(o.id==1)时,如果响应的id是一个随机数呢。在这种情况下如何解决我想如果id是一个随机数,那么更新的代码就会起作用。嘿,谢谢,我收到了。一个小问题是,如果可以有两个以上的id值(即id=1,id=2,id=3),我们是否有办法创建相应的响应数组对象,这意味着({x:10,id1:30,id2:50,id3:“some value”}),到目前为止您尝试了什么?。请遵循
reduce
是您的朋友