我正在创建对象数组。该数组可以具有多个相同的对象,因此最终结果将类似于:
MyArray = [obj1, obj1, obj2]
我想在不声明新变量的情况下计算数组中有多少obj1,因为我想使用此方法来存储和计算数百个不同的对象。
这是用于Angular网络应用程序来管理订单。
我当时想将这些对象存储为:
MyArray = [{obj1: 2}, {obj2: 1}]
但是我不知道该怎么做,也不知道添加另一个obj时如何增加该值。
谢谢。
答案 0 :(得分:2)
您可以使用Map
,在这里您可以将对象作为键并计算发生次数。
Outputs:
HarvestApi:
Description: URL for application
Export:
Name: HarvestApi
Value: !Ref 'LocationRef'
var o1 = { a: 1 },
o2 = { a: 1 },
o3 = { a: 1 },
array = [o1, o2, o1, o3, o1, o2],
count = array.reduce((m, o) => m.set(o, (m.get(o) || 0) + 1), new Map);
console.log(Array.from(count));
答案 1 :(得分:0)
最简单的方法是使用set,后接过滤器。
工作示例:
const data = [5, 5, 5, 4, 4, 8, 8, 8, 8, 8, 9]
const result = [...new Set(data)].map(value => ({
value,
amount: data.filter(field => field === value).length
}))
console.log(result)
并使用您想要的输出格式:
const data = [5, 5, 5, 4, 4, 8, 8, 8, 8, 8, 9]
const result = [...new Set(data)].map(value => ({
[value]: data.filter(field => field === value).length
}))
console.log(result)
答案 2 :(得分:0)
var array=['a1','a1','b1','c1','c1']
var resultCount={}
array.forEach(ele=>{ resultCount[ele] = (resultCount[ele]||0) + 1;});
console.log(resultCount)
答案 3 :(得分:-1)
我的第一个建议是尝试使用包含MultiSet
功能的JavaScript库(例如,在Java中)。 This question可能会带您进入可能有用的地方。
如果您不想引入其他依赖关系,则可以定义自己的类,该类存储一个Map
属性,该属性使用要存储的对象作为键并保存表示数量对象作为值(more on JavaScript Maps
)。
您可以通过提供一种方法myMultiSet.add(obj)
来实现,如果obj
不在Map
中,则该方法会将新元素添加到集合中并设置其计数值1
。如果obj
已经在Map
中,则只需将值增加1
。
这是一个示例实现:
class MultiSet {
constructor() {
this.items = new Map();
}
add(obj) {
if (this.items.has(obj)) {
console.log(`${obj} is already in items. Incrementing.`);
this.items.set(obj, this.items.get(obj) + 1);
} else {
console.log(`${obj} is new to items. Adding.`);
this.items.set(obj, 1);
}
}
getCount(obj) {
return this.items.get(obj);
}
};
let obj1 = { blah: 1, blah2: 2 };
let myMultiSet = new MultiSet();
myMultiSet.add(obj1);
myMultiSet.add(1);
myMultiSet.add('tree');
myMultiSet.add(1);
myMultiSet.add(obj1);
console.log(`Number of obj1 in set: ${myMultiSet.getCount(obj1)}`);
console.log(`Number of 'tree' in set: ${myMultiSet.getCount('tree')}`);
console.log(`Number of 1 in set: ${myMultiSet.getCount(1)}`);