两个数组之间的Javascript计数
我有2个数组对象,我需要对我们拥有的许多类型的卡进行计数 第一个对象包含所有汽车id,第二个列表包含汽车类型 以下是数据:两个数组之间的Javascript计数,javascript,arrays,json,Javascript,Arrays,Json,我有2个数组对象,我需要对我们拥有的许多类型的卡进行计数 第一个对象包含所有汽车id,第二个列表包含汽车类型 以下是数据: var arr = { "categories": [{ "id": "100", "name": "category name", "car_id": "1" }, { "id": "192", "name": "category name here", "ca
var arr = {
"categories": [{
"id": "100",
"name": "category name",
"car_id": "1"
}, {
"id": "192",
"name": "category name here",
"car_id": "25"
}, {
"id": "192",
"name": "category name here",
"car_id": "27"
}]
};
var arr2 = {
"cars": [{
"id": "1",
"name": "car name",
"car_id": "1",
"type": "ford"
}, {
"id": "4",
"name": "name 2",
"car_id": "25",
"type": "ford"
}, {
"id": "4",
"name": "name 2",
"car_id": "27",
"type": "fiat"
}]
};
只有5种类型的汽车,所以我有5个变量:
var:
ford,
fiat,
mazda,
mini,
mg
所以,我需要的是这样的结局:
ford: 2;
fiat: 1;
mazda: 0;
mini: 0;
mg: 0;
我怎样才能做到这一点呢?如果您的类型数是固定的,请尝试这种方法 先做一张地图
var map = {
ford: 0,
fiat: 0,
mazda: 0,
mini: 0,
mg: 0
};
现在迭代数组并按类型计数
arr2.cars.forEach( function( item ){
map[ item.type ]++;
});
您的地图现在已填充值
var arr2={
“汽车”:[{
“id”:“1”,
“名称”:“车辆名称”,
“车号”:“1”,
“类型”:“福特”
}, {
“id”:“4”,
“名称”:“名称2”,
“车号”:“25”,
“类型”:“福特”
}, {
“id”:“4”,
“名称”:“名称2”,
“车号”:“27”,
“类型”:“菲亚特”
}]
};
变量映射={
福特:0,
菲亚特:0,
马自达:0,,
迷你:0,
mg:0
};
arr2.cars.forEach(功能(项目){
映射[item.type]++;
});
控制台日志(map)代码>
是进行这种数组计算的最佳选择。A将帮助您在遍历汽车阵列时跟踪独特的汽车品牌
var obj2={
“汽车”:[{
“id”:“1”,
“名称”:“车辆名称”,
“车号”:“1”,
“类型”:“福特”
}, {
“id”:“4”,
“名称”:“名称2”,
“车号”:“25”,
“类型”:“福特”
}, {
“id”:“4”,
“名称”:“名称2”,
“车号”:“27”,
“类型”:“菲亚特”
}]
};
const typeStat=cars=>{
让map=cars.reduce((m,{type})=>
m、 set(type,(m.get(type)| | 0)+1),newmap();
返回Array.from(map,([make,count])=>({make,count}));
};
let stats=typeStat(obj2.cars)
console.log(stats)代码>您只需要
countBy(arr2.cars, 'type')
countBy
的实现留作练习。没有JSON对象这样的东西。JSON始终是一个字符串。重新表述问题我将使用for in循环和一个对象,其中键作为汽车名称,值作为计数器。我认为这是一项非常简单的任务,在依赖堆栈溢出之前,您需要自己弄清楚“home many types of card”是什么意思?第一个数组如何计算?但根据定义,还有其他类型,无论是现在还是将来。因为OP提到有5个变量,所以我认为类型的数量是固定的。无论如何,这可以很容易地扩展到支持动态数量的类型。
countBy(arr2.cars, 'type')