js 数组问题

流沙
  • 74

m =[{"name":a,"number":1},{"name":a,"number":3}]

怎么求 m[0].number + m[1].number ?
回复
阅读 941
3 个回答

LZ的需求应该是想要对一个数组里面所有元素的某个属性(number)进行求和,通过reduce很优雅就实现出来,如下:

const sum = m.reduce((memo, ele) => memo + ele.number, 0)

当然也可以通过不断给一个外部变量赋值来达到目的:

let sum = 0;
m.forEach(ele => {
    sum += ele.number
})

上述是基于函数式编程的实现,通过一般的循环方式实现如下:

let sum = 0
for(let i in m){
    sum += m[i].number
}

上面所有实现里面,前提是保证每个元素都有这个属性(number),并且这个属性存在,但事实通常会有个别出现一些问题,比如是undefined,这时候就需要特别处理一下:

let sum = 0
for(let i in m){
    let n = m[i].number
    sum += _.isNumber(n)?n:0 //_指的是lodash
}

没看懂问题。。
首先 m =[{"name":a,"number":1},{"name":a,"number":3}] 直接报错

a如果不是变量要用引号的 name随意

再然后m[0].number + m[1].number 这个不是能加出来吗??

Array.prototype.reduce()
reduce() 方法对累加器和数组中的每个元素 (从左到右)应用一个函数,将其减少为单个值。
https://developer.mozilla.org...

var m =[{"name":'a',"number":1},{"name":'a',"number":3}]
console.log(m.reduce((v,o)=> v + o.number, 0))
你知道吗?

宣传栏