美文网首页
从对象数组中取出某个属性相同的对象

从对象数组中取出某个属性相同的对象

作者: 钢铁萝莉猫 | 来源:发表于2020-11-24 17:17 被阅读0次

输入:
[
{ type: "a", value: 1 },
{ type: "b", value: 2 },
{ type: "a", value: 3 },
{ type: "b", value: 9 }
]

目标:
[
{ type: "a", value: 4 },
{ type: "b", value: 11 }
]


思路一(较简便)
function sumByType(arr) {
    let obj = {}
    arr.forEach((item) => {
        console.log(obj, item.type, item.value)
        if (obj[item.type] !== undefined) {
            obj[item.type] += item.value
        } else {
            obj[item.type] = item.value
        }
    })
    return Object.keys(obj).map((key) => {
        return {
            type: key,
            value: obj[key]
        }
    })
}

sumByType([
        { type: "a", value: 1 },
        { type: "b", value: 2 },
        { type: "a", value: 3 },
        { type: "b", value: 9 }
    ])
思路二
function sumByType(arr) {
    if (arr.length === 0) return arr
    if (!Array.isArray(arr)) return arr
    if (
        !arr.every(
            (item) =>
                item.type &&
                item.value &&
                typeof item.type == "string" &&
                item.type.constructor == String &&
                typeof item.value == "number"&&
                !isNaN(item.value)
        )
    ) {
        return arr
    }

    let types = arr.map((item) => {
        return item.type
    })
    types = Array.from(new Set(types))
    return types.map((type) => {
        let sametypeArr = arr.filter((item) => item.type === type)
        return sametypeArr.reduce(
            (pre, cur, index) => {
                cur.value = pre.value + cur.value
                return cur
            },
            { type: sametypeArr[0].type, value: 0 }
        )
    })
}

sumByType( [{type: 'a', value: 1}, {type: 'b', value: 2}, {type: 'a', value: 3}, {type: 'b', value: 9}])

思路二解析

  • 1.先判断参数格式是否符合标准
  • 2.遍历数组得到所有的type并去重 =>获得types:[ 'a', 'b' ]
  • 3.遍历arr,把type相同的对象取出作为新的数组 =>获得sametypeArr:如[ { type: 'a', value: 1 }, { type: 'a', value: 3 } ]的数组
  • 4.遍历sametypeArr把value相加获得某个type的对象{ type: 'a', value: 4 }
  • 5.返回这个对象组成新的数组,即所求结果

相关文章

网友评论

      本文标题:从对象数组中取出某个属性相同的对象

      本文链接:https://www.haomeiwen.com/subject/lgxwiktx.html