深入比较javascript对象,保留对象1的键和对象2的值

深入比较javascript对象,保留对象1的键和对象2的值,javascript,Javascript,我希望深入比较javascript对象,保留来自基本对象的键,并在基本对象内复制来自新对象的不同值 我认为这是我想要保留的键和新对象的键之间的映射 基本对象: { name: "Will", lastname: "Smith", age: "45", movies : [ { title: "Hancock", price: { amount: "1500"

我希望深入比较javascript对象,保留来自基本对象的键,并在基本对象内复制来自新对象的不同值

我认为这是我想要保留的键和新对象的键之间的映射

基本对象:

{

    name: "Will",
    lastname: "Smith",
    age: "45",
    movies : [
        {
            title: "Hancock",
            price: {
                amount: "1500"
            }
        },
        {
            title: "Gemooni",
            price: {
                amount: "2500"
            }
        }
    ]
}
{

    actor_name: "Will",
    actor_firstname: "Smith",
    actor_age: "45",
    cinema : [ // for movies
        {
            title: "Hancock",
            price: {
                amount: "1900"
            }
        },
        {
            title: "Gemini",
            price: {
                amount: "3000"
            }
        }
    ]
}
要在基础对象中复制的新值:

{

    name: "Will",
    lastname: "Smith",
    age: "45",
    movies : [
        {
            title: "Hancock",
            price: {
                amount: "1500"
            }
        },
        {
            title: "Gemooni",
            price: {
                amount: "2500"
            }
        }
    ]
}
{

    actor_name: "Will",
    actor_firstname: "Smith",
    actor_age: "45",
    cinema : [ // for movies
        {
            title: "Hancock",
            price: {
                amount: "1900"
            }
        },
        {
            title: "Gemini",
            price: {
                amount: "3000"
            }
        }
    ]
}
这里,我想保留actor_name的值,并将其复制到第一个对象中的actor。所有值都相同,包括嵌套对象

结果:

{
名称:“将”,
姓:“史密斯”,
年龄:"45岁",,
电影:[
{
标题:“汉考克”,
价格:{
金额:“1900”
}
},
{
标题:“双子座”,
价格:{
金额:“3000”
}
}
]

}
我建议您创建映射对象

var src = {
  a1: "foo_a",
  b1: "foo_b",
}

var map = {
  a: "a1",
  b: "b1",
}
现在的解决办法是

function mapper(src,map) {
  var result = {};
  for(let i in map) result[i] = src[map[i]];
  return result;
}

var dst = mapper(src,map); // { a: "foo_a", b: "foo_b" }

这并不能直接解决深度映射问题,但您可以在
map
object中使用特殊前缀来告诉映射器函数值为object。

base\u object['movies']=新的\u object['cinema']
。基本对象和新对象之间的键是否总是相同的?您如何知道第一个对象中的
名称
键对应于第二个对象中的
参与者名称
键(其他键的问题相同)?基于价值观?@DhananjaiPai yep,他们不会change@slider我以前知道比较钥匙,它们不会改变。这里,演员姓名=姓名,演员年龄=年龄。。。所以我认为,我需要一种映射,当我比较对象以匹配键并复制基本对象中的值时