【问题标题】:Multiple object properties assignment in JavascriptJavascript中的多个对象属性分配
【发布时间】:2026-01-06 21:40:01
【问题描述】:

这有什么速记吗?

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

感谢您的宝贵时间。

【问题讨论】:

    标签: javascript object properties three.js


    【解决方案1】:

    是的,您可以使用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】:

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

      object.position = position;
      object.rotation = rotation;
      

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

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

      【讨论】:

        【解决方案3】:

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

        object = {...object, position, rotation}
        

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

        【讨论】:

        • 不应该用新属性替换旧属性吗?
        • 应该是,请注意,如果您将一些属性(例如 add object.rotation.a )添加到新属性中不存在的旧属性,它们将丢失。
        • 谢谢。但是,如果需要,也可以传播嵌套对象。
        • 当然,rotation = { ...object.rotation, ...rotation },在传递给对象之前合并旧的object.rotation 和新的rotation,顺便说一下,我们将所有object.rotation 属性替换为rotation
        【解决方案4】:

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

        原因:

        1. 只是几行,而不是一大堆,不要过度设计
        2. 它的可读性很强,即使是 IDE 也可以帮助您进行自动建议

        【讨论】:

        • 我同意所有解决方案看起来都比简单地使用多个光标等 ide 快捷方式更有效
        【解决方案5】:

        你也可以使用 for...in 循环,它简单易读。示例:

        for ( const property in position ) {
            object.position[property] = position[property];
        }
        

        MDN 参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

        【讨论】: