Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 如何在对象文本数组中循环,连接共享重复id的值?_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 如何在对象文本数组中循环,连接共享重复id的值?

Javascript 如何在对象文本数组中循环,连接共享重复id的值?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我需要一种有效的方法来循环遍历对象文本数组,并在具有重复ID的对象中连接值 与嵌套多个for循环相比,有没有更优雅的方法 例如,我得到的数据如下: { "theList": [ { "id": 101, "name": "Bubbles' Cat Farm", "number": "123" }, { "id": 102, "name": "Sunnyvale Park", "

我需要一种有效的方法来循环遍历对象文本数组,并在具有重复ID的对象中连接值

与嵌套多个for循环相比,有没有更优雅的方法

例如,我得到的数据如下:

{ "theList": [
    {
        "id": 101,
        "name": "Bubbles' Cat Farm",
        "number": "123"
    },
    {
        "id": 102,
        "name": "Sunnyvale Park",
        "number": "456"
    },
    {
        "id": 101,
        "name": "Bubbles' Cat Farm",
        "number": "789"
]};
预期结果应该是:

{ "theList": [
    {
        "id": 101,
        "name": "Bubbles' Cat Farm",
        "number": "123, 789"
    }, 
    {
        "id": 102,
        "name": "Sunnyvale Park",
        "number": "456"
]}


如果number是唯一具有不同值的键,则可以使用reduce执行以下操作:

const input={theList:[{id:101,name:Bubbles'Cat Farm,number:123},{id:102,name:Sunnyvale Park,number:456},{id:101,name:Bubbles'Cat Farm,number:789}] const merged=input.theList.reduceac,{id,name,number}=>{ acc[id] ?acc[id][编号]+=,+编号 :acc[id]={id,name,number}; 返回acc },{} const final={theList:Object.valuesmerged} console.logfinal如果number是唯一具有不同值的键,则可以使用reduce执行类似操作:

const input={theList:[{id:101,name:Bubbles'Cat Farm,number:123},{id:102,name:Sunnyvale Park,number:456},{id:101,name:Bubbles'Cat Farm,number:789}] const merged=input.theList.reduceac,{id,name,number}=>{ acc[id] ?acc[id][编号]+=,+编号 :acc[id]={id,name,number}; 返回acc },{} const final={theList:Object.valuesmerged}
console.logfinal您可以将容器设置为字典,其中键是ID,每个值都是空列表。所以当你循环原始数据时。如果密钥不存在,请创建一个包含一项的列表。如果键已经存在,只需将值附加到列表中。

您可以将容器设置为字典,其中键是ID,每个值都是空列表。所以当你循环原始数据时。如果密钥不存在,请创建一个包含一项的列表。如果键已经存在,只需将值附加到列表中。

您可以使用

让obj=[{id:101,名称:泡泡猫农场,编号:123},{id:102,名称:桑尼维尔公园,编号:456},{id:101,名称:泡泡猫农场,编号:789}]; 设op=obj.reduceout,inp=>{ ifout[inp.id]{ out[inp.id].number+=','+inp.number; }否则{ out[inp.id]=inp } 返回 },{} console.logObject.valuesop您可以使用

让obj=[{id:101,名称:泡泡猫农场,编号:123},{id:102,名称:桑尼维尔公园,编号:456},{id:101,名称:泡泡猫农场,编号:789}]; 设op=obj.reduceout,inp=>{ ifout[inp.id]{ out[inp.id].number+=','+inp.number; }否则{ out[inp.id]=inp } 返回 },{} console.logObject.valuesop使用reduce和findIndex函数,您将能够实现您想要的功能

常量数组=[{ id:101, 名称:泡泡猫农场, 电话:123 }, { id:102, 名称:桑尼维尔公园, 电话:456 }, { id:101, 名称:泡泡猫农场, 电话:789 } ] const result=array.reduceacum,cv=>{ const index=accum.findIndexitem=>item.id==cv.id; 如果索引==-1{ 累积pushcv; }否则{ 累计[索引]。编号+=,+cv.number; } 返回累计; }, [] console.logresult使用reduce和findIndex函数,您将能够实现您想要的

常量数组=[{ id:101, 名称:泡泡猫农场, 电话:123 }, { id:102, 名称:桑尼维尔公园, 电话:456 }, { id:101, 名称:泡泡猫农场, 电话:789 } ] const result=array.reduceacum,cv=>{ const index=accum.findIndexitem=>item.id==cv.id; 如果索引==-1{ 累积pushcv; }否则{ 累计[索引]。编号+=,+cv.number; } 返回累计; }, []
console.logresultunless如果数据结构不总是id、名称、编号,则只需1个循环就可以了。除非数据结构不总是id、名称、编号,否则只需1个循环就可以了。能否显示一点代码来澄清?能否显示一点代码来澄清?