根据 Javascript 中的 属性 值从数组对象中获取唯一对象
Getting unique objects from object of array based on property value in Javascript
我有一个对象数组:
const data = [{
"Name": "Mike",
"Age": "24",
"debt": "1000"
},
{
"Name": "Mike",
"Age": "24",
"debt": "2000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
]
如何根据名称的唯一值创建一个对象数组,包括分配给该名称的所有债务的总和?
例如:
const newData= [{
"Name": "Mike",
"Age": "24",
"debt": "3000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
]
我尝试了几种方法,其中我首先根据名称获取唯一数据:
//Original data
const data = [{
"Name": "Mike",
"Age": "24",
"debt": "1000"
},
{
"Name": "Mike",
"Age": "24",
"debt": "2000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
]
//getting unique values based on name
const unique = [...new Set(data.map(item => item.Name))]
//mapping and adding each name into saperate object and later //combining it using Object.merge after adding new Debt which //contains sum of both the debts
for (value in unique) {
var datamenu = data.map(function(element, index, array) {
if (element.Instrument === value) {
unique[value] = element
}
return unique[value]
})
}
console.log(datamenu)
但我也只得到 Nathan 的输出而不是 mike。
以下代码可能对您有所帮助。
const arr = [
{
"Name": "Mike",
"Age": "24",
"debt": "1000"
},
{
"Name": "Mike",
"Age": "24",
"debt": "2000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
];
let unique = []
for (let char of arr) {
let check = unique.find(e=> {
if(char.Name == e.Name){
e.debt = parseInt(e.debt) + parseInt(char.debt)
return true
}
return false;
})
if(!check) {
unique.push(char)
}
}
我找到了您的解决方案。试试这个:
const getData = () => {
const debtSums = data.map(person => {
const personD = data.filter(el => el.Name === person.Name).reduce((prev, curr) => {
const debt = prev.debt + curr.debt;
return {...person, debt};
})
return personD;
})
const removeDuplicates = debtSums.reduce((prev, curr) => {
const alreadyPushedIndex = prev.findIndex(i => i.Name === curr.Name);
if (alreadyPushedIndex === -1) {
prev.push(curr);
}
return prev;
}, []);
return removeDuplicates;
}
也许它可以更优化一些,但它可以满足您的要求:)
我有一个对象数组:
const data = [{
"Name": "Mike",
"Age": "24",
"debt": "1000"
},
{
"Name": "Mike",
"Age": "24",
"debt": "2000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
]
如何根据名称的唯一值创建一个对象数组,包括分配给该名称的所有债务的总和?
例如:
const newData= [{
"Name": "Mike",
"Age": "24",
"debt": "3000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
]
我尝试了几种方法,其中我首先根据名称获取唯一数据:
//Original data
const data = [{
"Name": "Mike",
"Age": "24",
"debt": "1000"
},
{
"Name": "Mike",
"Age": "24",
"debt": "2000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
]
//getting unique values based on name
const unique = [...new Set(data.map(item => item.Name))]
//mapping and adding each name into saperate object and later //combining it using Object.merge after adding new Debt which //contains sum of both the debts
for (value in unique) {
var datamenu = data.map(function(element, index, array) {
if (element.Instrument === value) {
unique[value] = element
}
return unique[value]
})
}
console.log(datamenu)
但我也只得到 Nathan 的输出而不是 mike。
以下代码可能对您有所帮助。
const arr = [
{
"Name": "Mike",
"Age": "24",
"debt": "1000"
},
{
"Name": "Mike",
"Age": "24",
"debt": "2000"
},
{
"Name": "Nathan",
"Age": "26",
"debt": "500"
},
];
let unique = []
for (let char of arr) {
let check = unique.find(e=> {
if(char.Name == e.Name){
e.debt = parseInt(e.debt) + parseInt(char.debt)
return true
}
return false;
})
if(!check) {
unique.push(char)
}
}
我找到了您的解决方案。试试这个:
const getData = () => {
const debtSums = data.map(person => {
const personD = data.filter(el => el.Name === person.Name).reduce((prev, curr) => {
const debt = prev.debt + curr.debt;
return {...person, debt};
})
return personD;
})
const removeDuplicates = debtSums.reduce((prev, curr) => {
const alreadyPushedIndex = prev.findIndex(i => i.Name === curr.Name);
if (alreadyPushedIndex === -1) {
prev.push(curr);
}
return prev;
}, []);
return removeDuplicates;
}
也许它可以更优化一些,但它可以满足您的要求:)