合并数组内的对象的数字

21 篇文章 0 订阅

### 标准用法

```
const oa = require('object_array')

oa([{a:1,b:2,c:3},{a:4,b:5,d:6}])//{a:5,b:7,c:3,d:6}

oa([{a:{a1:1,b1:2},b:2},{a:{a1:3,a2:4,a3:5}},c:{c:10}}])//{a:{a1:4,b1:2,a2:4,a3:5},b:2,c:{c:10}}

```
---
### 类型冲突情况
```
oa([{a:{a1:1,a2:2},b:2},{a:1,b:{b1:1}}])//{a:{a1:1,a2:2},b:2}
oa([{a:1,b:'bbb'},{a:'aaa',b:2,c:'ccc'}])//{a:1,b:2,c:0}
```

### 类型问题
> 传入的类型不正确,原路返回
```
oa(1)//1
oa({a:1})//{a:1}
```
 

```

const re = {}
function run (key,_in){
    if(_in.length<=1){
        return _in
    }
    return key.map(itm=>{
        const e = _in.reduce((l='', r, index)=>{
            if(typeof l[itm] === 'object'||typeof r[itm] === 'object'){
                if(index!==1&&typeof l !== typeof r[itm]){
                    return l
                }

                if(index === 1 && typeof l[itm] !== typeof r[itm]){
                    return l[itm]
                }

                if(index === 1){
                    var re = run(Object.keys(Object.assign({},l[itm],r[itm])),[l[itm]||{},r[itm]||{}])
                }else{
                    var re = run(Object.keys(Object.assign({},l,r[itm])),[l||{},r[itm]||{}])
                }
                return Object.assign(...re)
            }
              if(index===1){
                const le = Number.isNaN(+l[itm])?0:+l[itm]
                const ri = Number.isNaN(+r[itm])?0:+r[itm]
                return le+ri
            }else{
                if(typeof l !== typeof r[itm]){
                    return l
                }

                const result = l + +(r[itm]||'')

                if(Number.isNaN(result)){
                    return l
                }

                return result
            }
        });
        return {
            [itm]:e
        }
    })
}

const object_array = (_in)=>{
    if(!Array.isArray(_in)){
        return _in
    }
    const key = Object.keys(Object.assign({},..._in))
    return Object.assign(...run(key,_in))
}

```

https://github.com/moiamoia/parse_object_array

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值