多个对象属性赋值

Dam*_*ica 6 javascript properties object

这有什么简写吗?

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
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间.

Nin*_*olz 10

您可以通过直接分配对象来使用直接方法,

object.position = position;
object.rotation = rotation;
Run Code Online (Sandbox Code Playgroud)

或者使用数组和迭代属性的键.

['x', 'y', 'z'].forEach(function (k) {
    object.position[k] = position[k];
    object.rotation[k] = rotation[k];
});
Run Code Online (Sandbox Code Playgroud)


Nen*_*car 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)
Run Code Online (Sandbox Code Playgroud)

如果您只想从对象中获取特定属性,则可以使用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)
Run Code Online (Sandbox Code Playgroud)


Moh*_*sen 7

使用 ES6 扩展运算符,您可以在一行中更轻松地完成问题示例:

object = {...object, position, rotation}
Run Code Online (Sandbox Code Playgroud)

请注意,它将用旧属性替换新属性


Eng*_*eer 6

我的建议:不要使用任何“聪明”的循环和动态 SH*T

原因:

  1. 只是几行,不是很多行,不要过度设计
  2. 它的可读性非常强,甚至 IDE 都可以帮助您进行自动建议