对于我来说,虽然已经敲代码有大半年了,不过仍然对数组与数组对象的去重和相加有了阴影,所以把这次的感谢写下来
一、数组对象的相加
jsondata的值:
var jsondata = []
var obj = []
jsondata = e.data var data_pie = new Array(); $.each(jsondata, function(index, item) { //hasOwnProperty : 查找obj数组中是否有‘name’属性 if(obj.hasOwnProperty(item.name)){ //如果没有,那么就让 数值 相加 obj[item.name] += (item.zongjinshui - item.zongchushui) / item.zongjinshui }else{ //如果有这个属性 那么 就直接赋值 obj[item.name] = (item.zongjinshui - item.zongchushui) / item.zongjinshui } });
console.log(obj)
打印obj的值:
第二种循环方法
var jsondata = []
var obj = []
jsondata = e.data console.log(jsondata) var data_pie = new Array(); $.each(jsondata, function(index, item) {
//第二种方法
if(obj[item.name]) { obj[item.name] += (item.zongjinshui - item.zongchushui) / item.zongjinshui } else { obj[item.name] = (item.zongjinshui - item.zongchushui) / item.zongjinshui } }); console.log(obj)
其中jsondata和obj的值是一样的。
如果只拿到数组的话,到这一步已经好了,但是我的项目有时候要求的是数组对象,
//通过遍历obj数组 ,将obj的属性赋值 $.each(obj, function(index, item) {
//这里需要自己打印看下index和item的值分别是什么,不要给属性加错了值 data_pie.push({ 'value': item, 'name': index }) }); console.log(data_pie)
打印的data_pie:
至此,数组与数组对象的相加已完成。
二、数组的去重
当数组中有同样的属性,但是不需要相同的几条,那么就考虑去重了,只留下一条
//1 reduce去重,针对数组对象 let person = [ {id: 0, name: "A"}, {id: 1, name: "B"}, {id: 2, name: "C"}, {id: 3, name: "D"}, {id: 1, name: "E"}, {id: 2, name: "F"}, ]; let obj = {}; let peon = person.reduce((cur,next) => { obj[next.id] ? "" : obj[next.id] = true && cur.push(next); return cur; },[]) //设置cur默认类型为数组,并且初始值为空的数组 console.log(peon); //2 Set去重,针对纯数组元素 let arr = [1,2,2]; console.log([...new Set(arr)]); // [1,2]
原文链接:https://blog.csdn.net/qq_39045645/java/article/details/103383230
这个去重我没有这样试过,先保存下。