3 回答

TA貢獻1725條經(jīng)驗 獲得超8個贊
我為你準備了一個小功能:
根據(jù)您在評論中提出的問題,連同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 中使用了大多數(shù)人更喜歡對象的位置,因為 JS 中的映射是可迭代的,但是對于一個對象,我不得不做一個額外的Object.keys()步驟,所以這使得它比對象方法稍微更有效,雖然有點冗長.
另請注意,在第三種情況下,當具有特定對象的對象沒有response_code任何數(shù)據(jù)時,結(jié)果將是一個空數(shù)組而不是字符串。在像 JS 這樣的弱類型環(huán)境中,保持某種類型一致性始終是一個好習(xí)慣(這實際上使得 'No data' 的輸入值response_code并不理想),否則您可能需要在任何地方進行類型檢查(比如在編輯的函數(shù)中)在上面的片段中)。
當具有相同的對象response_code存在于兩個不同的數(shù)組中時(兩個輸入數(shù)組可以簡單地合并為一個),可以在評論中提到的約束中使用相同的函數(shù):
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]));

TA貢獻1863條經(jīng)驗 獲得超2個贊
我已經(jīng)通過下面的代碼解決了數(shù)組合并問題。
const mergedArray = [];
myarray.forEach((obj, index) => {
var newObj = {}
if(index > 0){
if(mergedArray.length > 0){
for(let i=0; i<obj.response_message.length;i++){
mergedArray[0].response_message.push(obj.response_message[i]);
}
}
}else{
newObj["response_code"] = obj.response_code ;
newObj["response_message"] = obj.response_message;
mergedArray.push(newObj);
}
})

TA貢獻1765條經(jīng)驗 獲得超5個贊
const arrayOf0 = yourArray.filter(item => item.response_code===0)
const arrayOf1 = yourArray.filter(item => item.response_code===1)
const merged0 = {response_code: 0, response_message: []};
const merged1 = {response_code: 1, response_message: []};
arrayOf0.forEach(item => {
merged0.response_message.push(item.response_message[0]
})
arrayOf1.forEach(item => {
merged1.response_message.push(item.response_message[0]
})
像這樣的東西?
添加回答
舉報