gpt4 book ai didi

javascript - 如何使用唯一键将两个或多个对象数组合并为一个

转载 作者:行者123 更新时间:2023-11-30 08:19:29 25 4
gpt4 key购买 nike

我需要基于两个或更多另一个数组创建一个数组,数组中的每个元素都有唯一的键键的名称应该递增此数据由 Recharts 绘制但是下面的代码不正确,我为每个键得到了相同的值

你可以看到演示https://jsfiddle.net/shuts13/hn52vpxf/

我有数组数组:

const setOfArrays = [
[
{
'dateTime': 1531612800000,
'value': 97.0,
'rangeMin': 79.0,
'rangeMax': 110.0
},
{
'dateTime': 1531512800000,
'value': 96.0,
'rangeMin': 79.0,
'rangeMax': 110.0
}],
[{

'dateTime': 1544745600000,
'value': 82.7,
'goal': 77.0

},{

'dateTime': 1544745600000,
'value': 81,
'goal': 77.0

}],
[{
'dateTime': 1531612800000,
'value': 66.0,
'rangeMin': 50.0,
'rangeMax': 80.0
},{
'dateTime': 1531612800000,
'value': 65.0,
'rangeMin': 50.0,
'rangeMax': 80.0
}]
]

我期望得到的输出

[
{
'dateTime': 1531612800000,
'value': 97.0,
'rangeMin': 79.0,
'rangeMax': 110.0,

'dateTime1': 1544745600000,
'value1': 82.7,
'goal1': 77.0,

'dateTime2': 1531612800000,
'value2': 66.0,
'rangeMin2': 50.0,
'rangeMax2': 80.0

},
{
'dateTime': 1531512800000,
'value': 96.0,
'rangeMin': 79.0,
'rangeMax': 110.0,

'dateTime1': 1544745600000,
'value1': 81,
'goal1': 77.0,

'dateTime2': 1531612800000,
'value2': 65.0,
'rangeMin2': 50.0,
'rangeMax2': 80.0
}
]

我写的代码不正确,值是重复的,我不知道哪里错了

最佳答案

使用 Array.reduce , Array.forEach , Object.entries , Object.values & Object.assign

  • 想法是创建一个对象,其中 key 作为嵌套数组 indexvalue 作为 object,如下所示结果数组。然后使用 Object.values 获取结果数组。
  • 因此,为了从给定的数组创建对象,我们将使用 Array.reduce,其中对于数组中的每个项目,我们将执行以下操作
  • 遍历项目对象数组并检查给定索引的缩减对象中是否存在对象
  • 如果没有找到条目,将条目添加到对象中,值为 object {...o}
  • 否则,如果找到条目,则针对项目对象中的每个键、值,更新相应的对象

注意 - 由于结果对象应该是嵌套数组的长度,我们知道结果对象中的键数将与任一嵌套数组的长度相同。这就是为什么在a[i]中,i是嵌套数组的索引。对于值,我们知道第一个数组中的第一个对象将按原样出现,其他对象将以数组索引 j 为后缀。因此,我们检查了 a 中是否存在对应于 index 的对象,因为对于第一个数组对象,它始终是未定义的,因此,我们将添加结果对象中的键:值。对于其他人,我们只需要循环并使用父迭代器 j 作为后缀,例如 ${k}${j}

const setOfArrays = [[{'dateTime':1531612800000,'value':97.0,'rangeMin':79.0,'rangeMax':110.0},{'dateTime':1531512800000,'value':96.0,'rangeMin':79.0,'rangeMax':110.0}],[{'dateTime':1544745600000,'value':82.7,'goal':77.0},{'dateTime':1544745600000,'value':81,'goal':77.0}],[{'dateTime':1531612800000,'value':66.0,'rangeMin':50.0,'rangeMax':80.0},{'dateTime':1531612800000,'value':65.0,'rangeMin':50.0,'rangeMax':80.0}]];

const result = Object.values(setOfArrays.reduce((a,c,j) => {
c.forEach((o,i) => {
if(a[i]) Object.entries(o).forEach(([k,v]) => Object.assign(a[i], {[`${k}${j}`] : v}));
else a[i] = {...o};
});
return a;
}, {}));
console.log(result);

关于javascript - 如何使用唯一键将两个或多个对象数组合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com