将arry转变成arry1

如图所示,当arry里两个对象的a和b相等时,让他们的num值相加,最终变成arry1

你可以把数组给循环出来,封装成一个对象,直接循环判断就可以.


var array = [
            {
                'a': '1a',
                'b': '1b',
                'num': 1,
            },
            {
                'a': '1a',
                'b': '1b',
                'num': 1,
            },
            {
                'a': '2a',
                'b': '2b',
                'num': 1,
            },
            {
                'a': '2a',
                'b': '2b',
                'num': 5,
            },
            {
                'a': '2a',
                'b': '1b',
                'num': 3,
            },
            {
                'a': '3a',
                'b': '2b',
                'num': 2,
            },
            {
                'a': '1a',
                'b': '2b',
                'num': 8,
            }
        ]
function filterData (array) {
            var array1 = [array[0]]
            for (let i = 0; i < array.length; i++) {
                let isChage = false;
                for (let j = 0; j< array1.length; j++) {
                    if (array[i].a === array1[j].a && array[i].b=== array1[j].b) {
                        console.log(array[i])
                        array1[j].num = array[i].num + array1[j].num
                        isChage = true;
                        break;
                    } 
                }
                if (!isChage) {
                    array1.push(array[i])
                }
            }
            return array1
}

差不多是这个意思吧

function text(array) {
				let obj = {}
				let list = []
				for (let index = 0; index < array.length; index++) {
					let item = array[index]
					let str = item.a + item.b
					if (!obj[str]&&obj[str]!=0) {
						// list.push()
						obj[str]=index
					} else {
						array[obj[str]].num = array[obj[str]].num + item.num
						array.splice(index, 1)
						index--
					}
				}
				return array
			}

通过键值对去判断,一次循环可以搞定