javascript - JavaScript:如何根据字段在数组中添加和排序相同的字段?
问题描述
我有以下数组 a ,如下所示:
var a = [
{name: 'phone' , id:1 ,num:1},
{name: 'milk' ,id:2, num:1},
{name: 'apple' , id:3 , num:1},
{name: 'phone', id: 4, num:3},
]
我想按数组名称过滤并添加自己的 num
var currentName = a[0]
let newArrys=[]
for(let i = 0; i<a.length;i++){
if(currentName.name == a[i].name){
a[i].num = a[i].num + currentName.num
let tmepArry = [];
tempArry.push(a[i]);
newArrys.push(tempArry);
}
}
我正在尝试获取以下二维数组:
[
[{name: 'phone', id:1, num:4}],
[{name: 'milk',id:2, num:1}],
[{name: 'apple', id: 3 num:1}]
]
结果无法筛选。
我的尝试无效。
你能帮助我吗?
解决方案
鉴于:
var a = [
{name: 'phone' , id:1 ,num:1},
{name: 'milk' ,id:2, num:1},
{name: 'apple' , id:3 , num:1},
{name: 'phone', id: 4, num:3},
]
const newArrys = a.reduce((acc, current) => {
// find an object in the array with a matching name
const existing = acc.find(obj => obj.name === current.name);
if (existing) {
// combine the numbers
existing.num += current.num;
} else {
acc.push(current);
}
return acc;
}, []).map(obj => [obj])
这将为您提供所需的东西。
推荐阅读
- image - 显示损坏的静态路线图像(Google Maps Directions API)
- nativescript - 自定义组件无法访问默认的 NativeScript 指令
- nested - Lisp:添加列表列表的各个元素
- vue.js - PhpStorm Vuetify 自动完成
- spring - Spring Framework 5.x 是否与 Oracle WebLogic 12c (12.2.1.3.0) 兼容?
- python - 装饰器的目的是什么(为什么要使用它们)?
- mysql - Codeigniter 连接的重复结果
- symfony - 信使rabbitmq symfony 4 ssl支持?
- sql - 时间序列图表数据的入口和出口点
- jquery - 数据表添加行