Javascript-通过mongodb文档上的循环重建arrayObject?

Javascript-通过mongodb文档上的循环重建arrayObject?,javascript,arrays,json,mongodb,object,Javascript,Arrays,Json,Mongodb,Object,我正在通过在MongoDB文档的ajax.get中的元素上循环来重建arrayObject arrayObject几乎正确,但数组中的文档之间缺少逗号分隔。 returnedVal.push(', {' + 'title: "' ... 这似乎就是为什么console.log(arrayObject[0].name)未定义 但尝试if/else语句以在开头排除前面的逗号时,会跳过if function reBuild(returnValue) { var docs = returnVal

我正在通过在MongoDB文档的ajax.get中的元素上循环来重建arrayObject

arrayObject几乎正确,但数组中的文档之间缺少逗号分隔。

 returnedVal.push(', {' + 'title: "' ...
这似乎就是为什么
console.log(arrayObject[0].name)未定义

但尝试if/else语句以在开头排除前面的逗号时,会跳过
if

function reBuild(returnValue)
{
  var docs = returnValue;
  var returnedVal = [];
  for (var i=0, length=docs.length; i < length; i++){

    if (returnedVal === [])
    {
      returnedVal.push('{' + 'title: "' + docs[i].title + '", quantity: ' + docs[i].quantity + ', _id: "' + docs[i]._id + '"}');
    }
    else
    {
      returnedVal.push(', {' + 'title: "' + docs[i].title + '", quantity: ' + docs[i].quantity + ', _id: "' + docs[i]._id + '"}');
    }

    console.log(returnedVal[i]);

  }
  console.log(returnedVal[0].title);
}
MongoDB via.get:

function getAll(res) {

    db.collection('demo').find().sort( { value: 1 } ).toArray(function (err, docs) {
        console.log("Got the Docs: " + utils.inspect(docs));

        // each doc looks like: { _id: ObjectID, title: 'string', quantity: int}

        res.json({docs: docs});

    });
}
在终端控制台中,文档如下所示:

[ { _id: 530c12c66e6b0de318000001,
    title: 'Sample1',
    quantity: 2 },
  { title: 'Sample2',
    quantity: 4,
    _id: 530c12cc6e6b0de318000002 } ]
我正在寻找。获取MongoDB文档的
arrayObject
,使用
object.foo
从arrayObject构建
var
,然后在排序后重新构建所有foobar的
arrayObject


另一个函数用于处理一些变量计算以进行排名。

作为更新

假设数据
returnValue
为(如您的示例所示)

正在传递给您的
reBuild()
函数
reBuild(returnValue)

“reBuild()”是将“returnValue”格式重新创建到另一个数组中的函数:

你的例子..

 returnedVal.push(', {' + 'title: "' ...
。。。有许多问题,-将前导逗号发送到
push
方法,并关闭和取消关闭引号以创建字符串或自定义格式

让我们将该函数简化为

function reBuild(arr) {

 var returnedVal = [];
 for (var i=0, len=returnValue.length; i < len; ++i){
   var newval = {_id:arr[i]._id,title:arr[i].title,quantity:arr.arr[i].quantity};
   returnedVal.push(newvalue);
 }

 console.log(returnedVal);
 return (returnedVal);

}
我想我们缺少了rebuild()函数连接的部分

查看
res.json({docs:docs})它的一部分-(以json形式响应数据的函数),这是正确的流吗

db.collection('demo').find().sort( { value: 1 } ).toArray(function (err, docs) {

    /* pass and rebuild the data array before you 'json' it */
    var rebuiltDocs = reBuild(docs); 
    res.json({docs: rebuiltDocs});

});

我已经猜到了很多关于你的应用程序正在做什么的事情。但关键是要理解,一旦您看到javascript对象的字符串表示形式

如果需要
JSON
通过http传输数据(这是主要原因),那么在“jsonify”数据之前,先对数据执行例程

使用JSON.parse(docs)

  • 对于应用程序中的数据,请使用
    JSON.parse()
  • 要在系统之间传输数据请使用
    JSON.stringify()


我觉得我在这方面没有帮助,但希望我能以某种方式解释您可能觉得有必要硬制作某些数组的原因和方式。

我们不需要管理数组-
returnedVal.push(',
只是
。push(…
很好。删除逗号,一切都会好的。您为什么要手工制作(无效)JSON字符串到数组中?为什么不创建一个对象文本数组,然后
JSON.stringify
(和/或
.join()
)它?因此,请扩展您正在使用的代码-例如提供
returnValue
的数据示例,我们将看到发生了什么。基本上,还有另一个函数将在arrayObject上循环,以更改值和排名顺序。然后需要重新生成文档,以循环生成一些自定义值html@RobSedgwick 添加了更多的代码,现在更透明了,这很幸运:)哪一位有帮助?简化该函数确实很神奇。通过节点传递数据数组也非常棒。不过,不管出于什么原因,包含函数调用会对ajax造成一些奇怪的影响。get似乎保持打开状态,这样一个
$(“#retrieve”).html(html);
btn上。单击
不会替换html,而是添加到其中!
GEThttp://localhost:9999/ [HTTP/1.1 200 OK 10ms]
不会为每次单击调用,更多divs日志
db.collection('demo').find().sort( { value: 1 } ).toArray(function (err, docs) {
    console.log("Got the Docs: " + utils.inspect(docs));
    res.json({docs: docs});

});
db.collection('demo').find().sort( { value: 1 } ).toArray(function (err, docs) {

    /* pass and rebuild the data array before you 'json' it */
    var rebuiltDocs = reBuild(docs); 
    res.json({docs: rebuiltDocs});

});