复制键:值为数组Javascript的对象元素

时间:2015-12-07 21:32:20

标签: javascript arrays object

这是一个我似乎缺乏的javascript知识的简单测试。我基本上是为monogdb编写一个查询前端,它几乎完成了一个小块。通过单击元素和大多数逻辑工作来构建查询。我坚持建立$and查询。

我有一个像这样的扁平物体:

obj1: {
    prop1: 'val1'
}

当用户单击列表项并输入自定义值时,会动态添加这些键值。当用户点击列表项中的2个或更多项时,我希望我的对象最终如下:

obj1: {
  $and: [
  {prop1: 'val1'},
  {prop2: 'val2'},
  {prop3: 'val3'}
  ]
}

所有原始键值字符串都包含在{}中,并成为$and数组的元素。

我可以让第一部分工作,即将键值转换为对象。我可以得到第二部分,注入一个$and数组并为它提供某种物体,但我不能让两者一致地工作。

它需要获取obj1中已有的值,从中创建一个对象并将其推入数组中。将该数组注入obj1,然后从obj1中删除旧的键值。

就我而言:

var add = []
var newElementObject= {}

for (var prop in obj1) {
    newElementObject = {};
    newElementObject[prop] = "custom value entered by user";
    delete obj1[prop]
    add.push(newElementObject);
}

obj1.$and = add;

一次有效。我得到了我正在寻找的结构,但是当我尝试向$and数组中添加更多项时,就会出现问题。第二个obj更新,第一个只是坐在那里说:

{$and : "custom value entered by user"}

我已经盯着这个太久了。

1 个答案:

答案 0 :(得分:0)

尝试

var newElementObject = {};
obj1.$add = obj1.$add || []; //keep the old array or make a new one

for (var prop in obj1) {
    if (!obj1.hasOwnProperty(prop) || prop == '$add') { continue; }
    newElementObject = {};
    newElementObject[prop] = "custom value entered by user";
    delete obj1[prop]
    obj1.$add.push(newElementObject);
}

如果你在同一个对象上运行这个代码两次,那么你就不会覆盖旧的数组引用,这听起来像是你的问题。