将多次添加到数组时,防止引用同一对象

时间:2015-10-26 04:28:53

标签: javascript node.js

我有一个类似于下面的示例对象的对象。

var obj = {
 id : "",
 entries: [
  {
    url : "some url",
    response : {a response object}
  },
  {
    url : "another url",
    response : {a response object}
  }
 ]
};

在上面的对象中,我有一个entries元素,它是一个对象数组。 entries元素中的每个对象都有一个'url'属性和一个'response'属性,它是一个对象。

在对象中,条目中可能缺少响应属性。在这种情况下,我在变量'tempObj'中有一个默认的响应对象,我将这个tempObj分配给'entries'元素。

var tempObj = {
 status : 200
 statusText : "Success"
};

obj.entries[1]["response"] = tempObj;

问题是当obj中缺少多个响应元素时,它会为第一个丢失的entries正确添加响应元素,但对于第二个entries,它会添加对添加了第一个元素。

我还需要在第二个元素中添加确切的值。我怎么能这样做?

这是在nodejs应用程序中(不是客户端javascript)。

1 个答案:

答案 0 :(得分:0)

只需遍历entries数组,并在必要时进行更新。例如:

var tempObj = {
    status : 200,
    statusText : "Success"
};

obj.entries.forEach(function(item){
    item.response = item.response || tempObj;
});

如果您需要默认响应对每个项目都是唯一的,那么只需使用您喜欢的克隆方法,并将其应用于分配行。例如,见这里:What is the most efficient way to deep clone an object in JavaScript?

更新:当我需要进行克隆,或任何常见的事情但是扩展常规js时,我通常会转向lodash。您可以使用此库轻松克隆,它可以在node.js和前端客户端上运行。要克隆你会做类似的事情:

item.response = item.response || _.assign({}, tempObj);