如何将一个JavaScript对象复制到另一个对象?

3

假设我想要创建一个空的JavaScript对象:

me = {};

然后我有一个数组:

me_arr = new Array();
me_arr['name'] = "Josh K";
me_arr['firstname'] = "Josh";

现在我想将该数组放入对象中,以便我可以使用me.name返回Josh K
我尝试过:
for(var i in me_arr)
{
    me.i = me_arr[i];
}

但是这并没有达到预期的效果。这种情况可能发生吗?我的主要目标是将该数组封装在JavaScript对象中,以便我可以将其作为JSON通过AJAX或其他方式传递给PHP脚本。


所以所有这些示例代码都是用JS编写的,对吧?不是PHP?如果是这样,那么php的json_encode就无法帮助你。 - Tesserex
PHP标签在这里实际上是无关紧要的。它只是一种视图/模板技术。在PHP文件中编写JS代码并遇到JS问题并不意味着这是PHP的问题 :) - BalusC
8个回答

6

由于属性名称也是一个变量,因此循环应该如下所示:

for(var i in me_arr)
{
    me[i] = me_arr[i];
}

如果您想了解更多关于JSON的内容,可以参考这篇文章


2

1
在你上面的代码中,你一遍又一遍地设置了me.i属性。为了实现你在这里所描述的功能,请尝试这样做:
for(var i in me_arr)
{
    me[i] = me_arr[i];
}

1

无须担心引用关系的最简单方式是真正地克隆对象。

var newObj = JSON.parse(JSON.stringify(oldObj));

非常方便,但如果您的对象中有功能,则不可行。


1
如果您的对象中有函数,则使用 stringify 方法会丢失它们。 - Markive

0
首先,"me_arr"不应该是一个数组,因为你实际上并没有像使用数组那样使用它。
var me_arr = {};
me_arr.name = "Josh K";
me_arr.firstname = "Josh";

或者,更短:

var me_arr = { "name": "Josh K", "firstname": "Josh" };

现在,你的循环几乎正确:

for (var key in me_arr) {
  if (me_arr.hasOwnProperty(key))
    me[key] = me_arr[key];
}

我不确定首先有两个变量的意义是什么,但无论如何。另外:确保使用var声明变量!!


0

为什么不直接这样做:

me['name'] = "Josh K";
me['firstname'] = "Josh";


这与

是相同的。
me.name = "Josh K";
me.firstname = "Josh";

阅读这篇有关"JS中的关联数组"的有趣文章。


0

在完成的数组上使用 json_encode()


0
你应该看看 JavaScript 中的 JSON。有一个JSON库可以帮助你构建 JSON 对象。

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