1:Object.keys()
利用该方法可以获取到数组内的键,然后获取到的键会组成一个数组
2:Object.values()
利用该方法可以获取到数组内每一个键对应的值,然后组成一个数组
现有一个arr数组,其中每一项都是一个对象,例如arr = [{ a: 1, b: 2 }, { a: 2, b: 3 }]
现需要将arr中的每一项中的a相加,每一项中的b相加,然后赋值给arr1,得到的结果为arr1 = [{a:3,b:5}]
方法一:
var sum1 = 0
var sum2 = 0
arr.map((v, i) => {
sum1 += Object.values(v)[0]
sum2 += Object.values(v)[1]
})
arr1.push({ a: sum1, b: sum2 })
console.log(arr1)
该方法较为死板,只能用于arr中项数较为少的情况下
方法二:
var arr1 = []
var arr2 = { a: 0, b: 0 }
arr.forEach(item => {
for (var key in item) {
arr2[key] += item[key]
}
})
arr1.push(arr2)
console.log(arr1)
该方法相比与方法一更加好一点,但是若arr中某一项或者某几项中存在某个键而其余的项没有,获取得到的最终结果与设置的arr2挂钩,需要根据得到的最终结果去设置arr2的数据(增加键或减少键)
方法三:
var arr1 = []
var arr2 = {}
arr.forEach(item => {
for (var key in item) {
if (!arr2[key]) {
arr2[key] = 0
}
arr2[key] += item[key]
}
})
arr1.push(arr2)
console.log(arr1)
该方法加入一个判断,去获取到不是每一项都存在的键,适用于所有情况
方法四:
var arr1 = []
arr1.push(
arr.reduce(
(acc, item) => (
Object.keys(item).forEach(
n => (acc[n] = acc[n] ? acc[n] + item[n] : item[n])
),
acc
),
{}
)
)
console.log(arr1)
该方法灵活,不需要在意arr中有多少项,每一项中含有多少个键也不会影响,也会按照累加的形式输出,不过需要理解reduce方法
该方法的链接地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce