Object.assign()

var arr = {prizes:[{prizeNameLabel:"label",prizeName:''},{prizeNameLabel:"label2",prizeName:''}]}

var arr1 = {prizes:[{prizeName:"aa"},{prizeName:"bb"}]}


Object.assign(arr,arr1);

我想得到这样的结果:

{prizes:[{prizeNameLabel:"label",prizeName:'aa'},{prizeNameLabel:"label2",prizeName:'bb'}]}
 
但是Object.assign()这个方法好像做不到,我要怎么用最简单的方法得到以上的结果,目前想到的就是一个个循环赋值 
阅读 2.7k
4 个回答

clipboard.png

var arr = {prizes:[{prizeNameLabel:"label",prizeName:''},{prizeNameLabel:"label2",prizeName:''}]}

var arr1 = {prizes:[{prizeName:"aa"},{prizeName:"bb"}]}

arr.prizes.forEach((item,index)=>{
    const item2 = arr1.prizes[index];
    Object.assign(item, item2)
})

可以试试lodash库

我这么写实现了,但感觉还是笨笨的

var arr = {prizes:[{prizeNameLabel:"label",prizeName:''},{prizeNameLabel:"label2",prizeName:''}]}

var arr1 = {prizes:[{prizeName:"aa"},{prizeName:"bb"}]}

for(let i=0;i<arr.prizes.length;i++){

let a=arr.prizes[i]
let b=arr1.prizes[i]
Object.assign(a, b);

}

function assign(target, source) {
    var targetType = target ? target.constructor : null;
    var sourceType = source ? source.constructor : null;
    if (targetType === sourceType && sourceType === Object) {
        for (var key in source) {
            var subTargetType = target[key] ? target[key].constructor : null;
            var subSourceType = source[key] ? source[key].constructor : null;
            if (subSourceType != null) {
                var value = source[key];
                if (subTargetType == null) {
                    target[key] = value;
                } else if (subTargetType === subSourceType) {
                    if (subSourceType === Array) {
                        for (var i = 0; i < value.length; ++i) {
                            var item = value[i];
                            assign(target[key][i], item);
                        }
                    } else if (subSourceType === Object) {
                        assign(target[key], value);
                    }
                }
            }
        }
    }
    return target;
}
console.log(assign(arr, arr1));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题