Javascript中的多个对象属性赋值

11

有没有这方面的速记方式?

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

感谢您抽出时间。

5个回答

12

是的,你可以使用 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)


9
你可以直接使用分配对象的方式来处理,
object.position = position;
object.rotation = rotation;

或者使用数组和迭代属性的键。
['x', 'y', 'z'].forEach(function (k) {
    object.position[k] = position[k];
    object.rotation[k] = rotation[k];
});

8

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

原因:

  1. 这只是几行代码,不需要过度设计
  2. 它非常易读,即使IDE也可以通过自动建议来帮助你

我同意所有的解决方案看起来比仅仅使用IDE快捷键(如多个光标)更费力。 - Muhammad Umer

8
使用ES6扩展操作符,您可以在一行中更轻松地完成此操作,针对问题样本:
object = {...object, position, rotation}

请注意它会用旧属性替换新属性。


1
它不应该用新属性替换旧属性吗? - Damjan Pavlica
1
如果您向旧属性添加一些新属性(例如添加object.rotation.a),而这些新属性在新版本中不存在,那么它们将会丢失。请注意。 - Mohsen
谢谢。但如果需要,也可以传递嵌套对象。 - Damjan Pavlica
确保 rotation = { ...object.rotation, ...rotation },在将旧的 object.rotation 和新的 rotation 合并之前传递给对象,顺便提一下,我们已经用替换后的 rotation 值替换了所有 object.rotation 属性。 - Mohsen

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接