这是一个我似乎缺乏的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"}
我已经盯着这个太久了。
答案 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);
}
如果你在同一个对象上运行这个代码两次,那么你就不会覆盖旧的数组引用,这听起来像是你的问题。