js 数组对象问题比较

var a = [
    {
        name: '火电',
        value: 1234,
        itemStyle: {
            color: '#C6345D',
        }
    }, {
        name: '水电',
        value: 689,
        itemStyle: {
            color: '#B55D65'
        }
    }, {
        name: '风电',
        value: 1666,
        itemStyle: {
            color: '#6957C1'
        }
    }, {
        name: '光伏',
        value: 1349,
        itemStyle: {
            color: '#7E55BF'
        }
    }, {
        name: '煤炭',
        value: 980,
        itemStyle: {
            color: '#4C866C'
        }
    }, {
        name: '化工',
        value: 980,
        itemStyle: {
            color: '#0A9971'
        }
    }, {
        name: '运输',
        value: 980,
        itemStyle: {
            color: '#1B95CC'
        }
    }, {
        name: '其它',
        value: 980,
        itemStyle: {
            color: '#BA9B2F'
        }
    }
]
var b = [
  {value: 71, name: '煤炭', code: 'E'}
  {value: 9, name: '其他', code: 'H'}
  {value: 197, name: '光伏', code: 'C'}
  {value: 464, name: '风电', code: 'B'}
  {value: 126, name: '水电', code: 'D'}
  {value: 113, name: '火电', code: 'A'}
  {value: 8, name: '化工', code: 'F'}
  {value: 2, name: '', code: ''}
  {value: 2, name: '运输', code: 'G'}
]
希望得到结果
 a = [
    {
        name: '火电',
        value: 113,
        code: 'A',
        itemStyle: {
            color: '#C6345D',
        }
    }, {
        name: '水电',
        value: 126,
        code: 'D',
        itemStyle: {
            color: '#B55D65'
        }
    }, {
        name: '风电',
        value: 464,
        code: 'B',
        itemStyle: {
            color: '#6957C1'
        }
    }.....
],

判断两个数组中对象的name值相等,将b数组中value 和code 赋值给到a数组中

阅读 1.2k
2 个回答
var a = [
    {
        name: '火电',
        value: 1234,
        itemStyle: {
            color: '#C6345D',
        }
    }, {
        name: '水电',
        value: 689,
        itemStyle: {
            color: '#B55D65'
        }
    }, {
        name: '风电',
        value: 1666,
        itemStyle: {
            color: '#6957C1'
        }
    }, {
        name: '光伏',
        value: 1349,
        itemStyle: {
            color: '#7E55BF'
        }
    }, {
        name: '煤炭',
        value: 980,
        itemStyle: {
            color: '#4C866C'
        }
    }, {
        name: '化工',
        value: 980,
        itemStyle: {
            color: '#0A9971'
        }
    }, {
        name: '运输',
        value: 980,
        itemStyle: {
            color: '#1B95CC'
        }
    }, {
        name: '其它',
        value: 980,
        itemStyle: {
            color: '#BA9B2F'
        }
    }
]
var b = [
  {value: 71, name: '煤炭', code: 'E'},
  {value: 9, name: '其他', code: 'H'},
  {value: 197, name: '光伏', code: 'C'},
  {value: 464, name: '风电', code: 'B'},
  {value: 126, name: '水电', code: 'D'},
  {value: 113, name: '火电', code: 'A'},
  {value: 8, name: '化工', code: 'F'},
  {value: 2, name: '', code: ''},
  {value: 2, name: '运输', code: 'G'},
]
// 希望得到结果
//  a = [
//     {
//         name: '火电',
//         value: 113,
//         code: 'A',
//         itemStyle: {
//             color: '#C6345D',
//         }
//     }, {
//         name: '水电',
//         value: 126,
//         code: 'D',
//         itemStyle: {
//             color: '#B55D65'
//         }
//     }, {
//         name: '风电',
//         value: 464,
//         code: 'B',
//         itemStyle: {
//             color: '#6957C1'
//         }
//     }.....
// ],
bhash = b.reduce((s,n)=>(s[n.name] = n,s),{})
a.forEach(n=>Object.assign(n,bhash[n.name] || {}))
a

image.png

a.forEach((item) =>
    b.some((i) => (i.name === item.name && ((item.value = i.value), (item.code = i.code)), true))
);
console.log(a);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题