如果一个键相同,则创建新的对象数组,然后添加这些对象的其他键值 [英] Create new array of objects if one key is same then add other key's value of those object
本文介绍了如果一个键相同,则创建新的对象数组,然后添加这些对象的其他键值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想根据一个键过滤掉我的对象数组。如果该键在其他对象中相同,则将添加对象的第二个值。我有一个如下所示的对象数组:
I want to filter down my array of object based upon the one key. If that key is same in other object then second value of object will be added. I have an array of object like below:
输入:
var myArray = [
{
_name : "Mike",
_amount : "7"
},
{
_name : "Julius",
_amount : "10"
},
{
_name : "Edison",
_amount : "2"
},
{
_name : "Mike",
_amount : "10"
},
{
_name : "Kate",
_amount : "0"
},{
_name : "Edison",
_amount : "10"
}
]
输出:
var myNewArray = [
{
_name : "Mike",
_amount : "17"
},
{
_name : "Julius",
_amount : "10"
},
{
_name : "Edison",
_amount : "12"
},
{
_name : "Kate",
_amount : "0"
},
]
迈克和爱迪生重复两次,以便为这些对象添加_amount键的值。它对我来说有点困惑。请帮帮我。谢谢!
Mike and Edison is repeated twice so _amount key's value added for those objects. Its little confusing for me. Please help me out. Thank you!
推荐答案
您可以使用 Array#forEach
和一个对象作为插入对象的参考。
You could use Array#forEach
and an object as reference for the inserted objects.
var myArray = [{ _name: "Mike", _amount: "7" }, { _name: "Julius", _amount: "10" }, { _name: "Edison", _amount: "2" }, { _name: "Mike", _amount: "10" }, { _name: "Kate", _amount: "0" }, { _name: "Edison", _amount: "10" }],
newArray = [];
myArray.forEach(function (a) {
if (!this[a._name]) {
this[a._name] = { _name: a._name, _amount: 0 };
newArray.push(this[a._name]);
}
this[a._name]._amount = (+this[a._name]._amount + +a._amount).toString(); // if you really
}, Object.create(null)); // need strings
console.log(newArray);
按要求排序按 _amount
降序
var myArray = [{ _name: "Mike", _amount: "7" }, { _name: "Julius", _amount: "10" }, { _name: "Edison", _amount: "2" }, { _name: "Mike", _amount: "10" }, { _name: "Kate", _amount: "0" }, { _name: "Edison", _amount: "10" }],
newArray = [];
myArray.forEach(function (a) {
if (!this[a._name]) {
this[a._name] = { _name: a._name, _amount: 0 };
newArray.push(this[a._name]);
}
this[a._name]._amount += +a._amount
}, Object.create(null));
newArray.sort(function (a, b) {
return b._amount - a._amount;
});
console.log(newArray);
这篇关于如果一个键相同,则创建新的对象数组,然后添加这些对象的其他键值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文