这有什么简写吗?
object.position.x = position.x
object.position.y = position.y
object.position.z = position.z
object.rotation.x = rotation.x
object.rotation.y = rotation.y
object.rotation.z = rotation.z
感谢您的时间。
答案 0 :(得分:9)
您可以通过直接分配对象来使用直接方法,
object.position = position;
object.rotation = rotation;
或使用数组和迭代属性的键。
['x', 'y', 'z'].forEach(function (k) {
object.position[k] = position[k];
object.rotation[k] = rotation[k];
});
答案 1 :(得分:7)
是的,您可以使用Object.assign()
。
var obj = {}
var position = {x: 1, y: 2, z: 3}
var rotation = {x: 1, y: 2, z: 3}
obj.position = Object.assign({}, position);
obj.rotation = Object.assign({}, rotation);
console.log(obj)

如果您只想从对象中获取特定属性,可以使用map()
创建拾取函数以获取对象数组,然后使用扩展语法分配每个对象。
var obj = {}
var position = {x: 1, y: 2, z: 3}
var rotation = {x: 1, y: 2, z: 3}
function pick(obj, props) {
return props.map(e => ({[e]: obj[e]}))
}
obj.position = Object.assign({}, ...pick(position, ['x', 'y']));
obj.rotation = Object.assign({}, ...pick(rotation, ['x', 'y', 'z']));
console.log(obj)

答案 2 :(得分:1)
我的建议:不要使用任何“清除”的动作和动态的SH * T
原因:
答案 3 :(得分:1)
对于问题样本,使用ES6 Spread Operator,您可以在一行中轻松完成
object = {...object, position, rotation}
请注意,它将用旧的属性替换新的属性