批量添加到Javascript对象

3
我希望能够向对象中添加内容,但不需要像每个对象都执行“messageStrings.x = 1”这样的操作。
例如,在一个文件中,我们可能会有以下内容:
var messageStrings = {
     Edit: "Edit",
     Cancel: "Cancel"
}

并且还有另一个文件,想要将更多内容添加到该对象中:

var messageStrings = {
    Update: "Update",
    Save: "Save"
}

如何最好地对现有对象进行批量添加?

谢谢。

4个回答

3
许多库都提供了一个“extend”函数,让你可以像这样做:

var obj = extend({ "default": "something"}, { "more": "stuff", "even": "more" });

这将为您提供一个具有"默认"、"更多"和"偶数"属性的对象。

函数的样子如下:

function extend() {
  var args = Array.prototype.slice.call(arguments, 0);

  var target = args[0];
  for (var i = 1; i < args.length; ++i) {
    for (var k in args[i]) {
      target[k] = args[i][k];
    }
  }
  return target;
}

一些实现可能有略微不同的语义,例如是否始终返回一个新创建的对象作为结果,或者始终修改第一个参数。

还要注意这是一个浅拷贝(shallow copy)——要进行完全的“深度”拷贝,你需要更多的代码。


1
您可以在TypeScript中这样做:

var messageStrings = {
 Edit: "Edit",
 Cancel: "Cancel"
}
var messageString2 = {
 Update: "Update",
 Save: "Save"
}
let obj = {...messageStrings, ...messageString2}

它将会给你:
{Edit: "Edit", Cancel: "Cancel", Update: "Update", Save: "Save"}

0
如果您正在使用jQuery,可以通过以下方式扩展对象: $.extend(objectA, objectB);
这样,您将获得一个包含A和B属性的对象。
否则,您可以使用简单的for in循环,例如:
for (var x in obj2) {
  obj1[x] = obj2[x];
}

这只是一个简单的例子,你应该进行一些检查以避免数据覆盖。


0

您可以将新值合并到现有对象中。jQuery 有 extend 方法可供使用。

如果不能使用 jQuery,您可以编写一个简单的递归装置(可能要检查 hasOwnProperty,以防某些库弄乱了 Object.prototype)。


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