![](/img/trans.png)
[英]How to get objects with unique values for specific keys from array of objects?
[英]How to perform addition of same keys' values of objects and return unique objects from array of objects using javascript?
我正在處理一項任務,其中我得到一個由對象數組組成的響應。
現在,我想根據特定條件對某些字段執行加法,並返回新的且唯一的對象數組,而不會出現任何重復。
這是回應。
let respData = [
{
"NEW": 0,
"Working": 0,
"Not Working": 2,
"Broken": 0,
"Location": "Karimnagar",
"TotalPrice": 274500,
"AssetsCount": 2,
"AssetType": "Hardware Devices"
},{
"NEW": 1,
"Working": 0,
"Not Working": 0,
"Broken": 0,
"Location": "chennai",
"TotalPrice": 4500,
"AssetsCount": 1,
"AssetType": "Undefined"
},{
"NEW": 0,
"Working": 0,
"Not Working": 0,
"Broken": 0,
"Location": "Undefined",
"TotalPrice": 0,
"AssetsCount": 1,
"AssetType": "Undefined"
},{
"NEW": 1,
"Working": 0,
"Not Working": 0,
"Broken": 0,
"Location": "Karimnagar",
"TotalPrice": 12500,
"AssetsCount": 1,
"AssetType": "Hardware Devices"
},{
"NEW": 0,
"Working": 1,
"Not Working": 0,
"Broken": 0,
"Location": "Karimnagar",
"TotalPrice": 1200,
"AssetsCount": 1,
"AssetType": "Hardware Devices"
}
]
如果AssetType
和Location
相同,現在我嘗試在對象中添加 integer 值。
如果不存在匹配的結果,則需要按原樣返回。
添加它們之后,我需要返回具有所有更新值的唯一對象數組。
我已經嘗試使用map
和filter
來獲得結果,但無法獲得正確的結果。
這是我嘗試過的代碼。
let respCopy = respData;
let finalObj = {}, testArray = [];
respCopy.forEach((copyData, i) => {
respData.forEach((data, j) => {
if(i !== j && copyData.AssetType === data.AssetType && copyData.Location === data.Location){
assetConditions.forEach((condition, k) => {
if(copyData[condition.name]){
finalObj[condition.name] = copyData[condition.name] + data[condition.name];
finalObj["AssetType"] = copyData.AssetType;
finalObj["Location"] = copyData.Location;
copyData[condition.name] = 0;
data[condition.name] = 0;
}
})
}else if(i == j && copyData.AssetType === data.AssetType && copyData.Location === data.Location){
assetConditions.forEach((condition, k) => {
if(copyData[condition.name]){
finalObj[condition.name] = copyData[condition.name];
finalObj["AssetType"] = copyData.AssetType;
finalObj["Location"] = copyData.Location;
copyData[condition.name] = 0;
data[condition.name] = 0;
}
})
}
});
testArray.push(finalObj);
})
這是預期的結果。
[
{
"NEW": 1,
"Working": 1,
"Not Working": 2,
"Broken": 0,
"Location": "Karimnagar",
"TotalPrice": 288200,
"AssetsCount": 4,
"AssetType": "Hardware Devices"
},{
"NEW": 1,
"Working": 0,
"Not Working": 0,
"Broken": 0,
"Location": "chennai",
"TotalPrice": 4500,
"AssetsCount": 1,
"AssetType": "Undefined"
},{
"NEW": 0,
"Working": 0,
"Not Working": 0,
"Broken": 0,
"Location": "Undefined",
"TotalPrice": 0,
"AssetsCount": 1,
"AssetType": "Undefined"
}
]
得到結果有什么錯誤嗎?
使用字典 object 作為代理可以輕松解決此類問題。
您必須將對象的鍵定義為您的唯一標識符(在您的情況下是AssetType
和Location
值的串聯),然后將 map 定義為您想要創建唯一數組的對象。
最終你會想要返回你的字典 object 的Object.values()
:
const arrayWithDuplicates = [{ key1: 1, key2: 2, foo: 1 }, { key1: 1, key2: 2, foo: 2 }, // Note the two first elements have identical keys { key1: 3, key2: 2, foo: 3 }, ]; function getDictKey(element) { // This can obviously be implemented otherwise const { key1, key2 } = element; return `${key1}_${key2}`; } const dictionary = {}; arrayWithDuplicates.forEach((element) => { const key = getDictKey(element); if (dictionary[key]) { dictionary[key].foo += element.foo; } else { dictionary[key] = element; } }); const arrayWithoutDuplicates = Object.values(dictionary); console.log(arrayWithoutDuplicates);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.