gpt4 book ai didi

javascript - 如何使用 Node js中的键对两个数组进行分组

转载 作者:行者123 更新时间:2023-12-02 21:27:14 26 4
gpt4 key购买 nike

我有以下两个要合并的对象。

[
{
"response_code": 1,
"response_message": [{
"a": 1000,
"b": 1000001,
"c": 10000002
}]
}]
[
{
"response_code": 1,
"response_message": [{
"a": 2000,
"b": 2000001,
"c": 20000002
}]
}
]

我想通过只有一个响应代码值来合并它们,如下所示,并合并响应消息的值,如下所示。

{
"response_code": 1,
"response_message": [
{
"a": 1000,
"b": 1000001,
"c": 10000002
},
{
"a": 2000,
"b": 2000001,
"c": 20000002
}]
}

真的陷入了如此复杂的合并,我只需要一次响应代码的值并合并响应消息的值。

在这里,我想从其他数组中删除响应代码值,并将响应消息值与第一个数组合并/分组。

最佳答案

我为你准备了一个小功能:

根据您在评论中提出的问题,以及 response_message 是字符串的测试用例,我编辑了代码片段以包含多个要测试的用例。

const inputs = [
[{
"response_code": 1,
"response_message": [{
"a": 1000,
"b": 1000001,
"c": 10000002
}]
},

{
"response_code": 1,
"response_message": [{
"p": 1000,
"q": 1000001,
"r": 10000002
}]
}
],
[{
"response_code": 1,
"response_message": [{
"a": 1000,
"b": 1000001,
"c": 10000002
}]
},
{
"response_code": 1,
"response_message": 'No data'
}
],
[{
"response_code": 1,
"response_message": 'No data'
},
{
"response_code": 1,
"response_message": 'No data'
}
]

]

const getGroupedArr = (arr) => {
const codeMap = arr.reduce((cMap,obj) => {
let existingMessageArr = cMap.get(obj.response_code);
let arrayToAdd = Array.isArray(obj.response_message) ? obj.response_message : [];
if(existingMessageArr){
existingMessageArr.push(...arrayToAdd);
} else {
cMap.set(obj.response_code,arrayToAdd);
}
return cMap;
},new Map());
const iterator = codeMap[Symbol.iterator]();
const resultArr = [];
for (let item of iterator) {
resultArr.push({
response_code: item[0],
response_message: item[1]
})
}
return resultArr;
}

inputs.forEach((inputArr,index) => {
console.log(`Result for input ${index+1}`,getGroupedArr(inputArr));
})

请注意,我使用了 Map,在 JS 中,大多数人更喜欢对象,因为 JS 中的映射是可迭代的,但对于对象,我必须执行额外的 Object.keys() 步骤,因此这比对象方法稍微更高效,尽管更冗长一些。

另请注意,在第三种情况下,当具有特定 response_code 的对象没有任何数据时,结果将是一个空数组而不是字符串。在像 JS 这样的弱类型环境中,保持某种类型一致性始终是一个好习惯(这实际上使得 response_code 中的“No data”输入值并不理想),否则您可能需要将 type到处检查(就像上面代码片段中编辑的函数一样)。

当具有相同 response_code 的对象存在于两个不同的数组中时,可以在您在评论中提到的约束中使用相同的函数(两个输入数组可以简单地合并为一个):

const inputArr1 = [{
"response_code": 1,
"response_message": [{
"a": 1000,
"b": 1000001,
"c": 10000002
}]
}]

const inputArr2 = [{
"response_code": 1,
"response_message": [{
"p": 1000,
"q": 1000001,
"r": 10000002
}]
}]

const getGroupedArr = (arr) => {
const codeMap = arr.reduce((cMap,obj) => {
let existingMessageArr = cMap.get(obj.response_code);
let arrayToAdd = Array.isArray(obj.response_message) ? obj.response_message : [];
if(existingMessageArr){
existingMessageArr.push(...arrayToAdd);
} else {
cMap.set(obj.response_code,arrayToAdd);
}
return cMap;
},new Map());
const iterator = codeMap[Symbol.iterator]();
const resultArr = [];
for (let item of iterator) {
resultArr.push({
response_code: item[0],
response_message: item[1]
})
}
return resultArr;
}


console.log(getGroupedArr([...inputArr1,...inputArr2]));

关于javascript - 如何使用 Node js中的键对两个数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60708814/

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