有没有合适的方法来克隆JavaScript中对象的某些基本属性?

有没有合适的方法来克隆JavaScript中对象的某些基本属性?,javascript,object,clone,Javascript,Object,Clone,我需要一个简单的函数来将基本属性列表从一个对象映射到另一个对象。我自己写了一个,但我想已经有一个行之有效的方法来实现这一点 var mapProperties = function (props, from) { var to = {}; for (var i = 0; i < props.length; i++) { to[props[i]] = from[props[i]]; } return to; } 有更好的主意吗?如果您不想

我需要一个简单的函数来将基本属性列表从一个对象映射到另一个对象。我自己写了一个,但我想已经有一个行之有效的方法来实现这一点

var mapProperties = function (props, from) {
    var to = {};

    for (var i = 0; i < props.length; i++) {
        to[props[i]] = from[props[i]];
    }

    return to;
}

有更好的主意吗?

如果您不想进行深度克隆,那么可以使用
对象。分配
将所有可枚举自身属性的值从一个或多个源对象复制到目标对象

var fromObj={
福:“福”,
酒吧:1
}
var targetObject=Object.assign({},fromObj);

console.log(targetObject)克隆有几种方法。如果您只需要一个浅层克隆(您的对象只包含一级基本体),
object.assign()
是一种简便的方法:

const fromObj = { a: 1, b: 2, c: 3 };
const toObj = Object.assign({}, fromObj);
Object.assign()
函数的基本意思是“将其他对象的所有属性分配给第一个对象”。通过将第一个对象设置为空对象,它实际上是一个克隆

如果需要更受控的副本,可以使用
Object.keys()
,这样就不必手动使用列出属性的数组:

//使用reduce和assign的简明示例
const cloneA=obj=>Object.keys(obj).reduce((result,key)=>Object.assign(result,{[key]:obj[key]}),{});
//使用for循环
const cloneB=obj=>{
const result={};
常量键=对象键(obj);
用于(让我输入钥匙){
结果[keys[i]]=obj[keys[i]];
}
返回结果;
}
常量fromObj={a:1,b:2,c:3};
console.log(cloneA(fromObj));

console.log(cloneB(fromObj))以下是一个只复制原语的实现,遵循以下约定:

函数过滤器原语(键){
return!(此[key]对象实例)
}
函数clonePrimitives(目标){
var sources=Array.from(参数).slice(1)
sources.forEach(函数(source){
var ownKeys=Object.getOwnPropertyNames(源)
var primitiveKeys=ownKeys.filter(filterPrimitives,源)
primitiveKeys.forEach(函数(键){
目标[键]=源[键]
})
})
返回目标
}
var target={};
变量源={
a:‘测试’,
b:/test/,
c:5,
d:空,
e:未定义,
f:{},
g:[]
}
clonePrimitives(目标,源,{a:'override'})

console.log(target)
没有内置的方法,如果它适合您的话,您所拥有的可能是好的。您认为您的代码有什么问题?考虑问这个问题。公平地说,这是一种黑客行为,但它是内置的。一种更高效的深度克隆算法也使用历史API黑客行为克隆具有循环引用的对象:
const fromObj = { a: 1, b: 2, c: 3 };
const toObj = Object.assign({}, fromObj);