与nodejs,mongoose和JSON对象数组拼接

时间:2012-01-05 20:07:07

标签: javascript arrays json node.js mongoose

我正在使用tomjs使用mongoose(指向mongolab),当我执行.findOne并返回结果时,一个字段是一个JSON对象数组但是当我console.log数组时我得到了

[ [object Object], [object Object], [object Object], [object Object], [object Object] ]

当我复制数组的确切内容并手动创建它并console.log时,我会看到所有JSON。这听起来不像是一个问题,但是当我尝试拼接这个返回的数组时,我遇到了问题。

console.log(arr.splice(0, 1));

输出

[ [object Object], [object Object], [object Object], [object Object] ]

所以它返回剩下的所有对象而不是已删除的对象。当我在数组上进行拼接时,我通过精确复制导致问题的数组中的内容来创建它正常工作(返回的元素是我删除的元素)。

我尝试在for循环中浏览数组并记录每个元素,JSON看起来很好。我有一个解决方法,但不应该做更多这样的工作,因为它应该... ...

    // outputs [ [object Object], [object Object]... ]
    console.log(s);

for (var i = 0; i < s.length; i++) {
    if (i == start) {
        el = s[i];
        break;
    }
}

s.splice(start, 1);
s.splice(end, 0, el);

for (var i = 0; i < s.length; i++) {
    // outputs the JSON for each element
    console.log(s[i]);
}

我还尝试了w3schools上的array.splice示例,以确保拼接工作一般,并且工作正常。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log("Removed: " + fruits.splice(2,1,"Lemon"));
console.log(fruits);

// OUTPUTS
Removed: Apple
Banana,Orange,Lemon,Mango

3 个答案:

答案 0 :(得分:3)

来自:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

返回

包含已删除元素的数组。如果只删除一个元素,则返回一个元素的数组

splice更改原始数组。不要打印它返回的内容,打印调用后给出的数组。

arr.splice(0, 1);
console.log(arr);

答案 1 :(得分:1)

经过多次挫折之后,我才弄明白这个问题。事实证明,在我的架构中没有正确设置回来的对象数组。我需要定义一个将在数组中的对象,然后对于该模式中的属性具有类似的内容。

var SongSchema = new Schema({
    title: String,
    url: String,
    source: String,
    duration: String
});

var PlaylistSchema = new Schema({
    userid: {
        type: String,
        index: { unique: true }
    },
    playlist_name: String,
    songs: [SongSchema]
});

之后工作。

答案 2 :(得分:-1)

感谢user1123534 ...您的方法有效。 而不是将playlistSchema作为

var PlaylistSchema = new Schema({
  userid: {
    type: String,
    index: { unique: true }
  },
  playlist_name: String,
  songs: [
    title: String,
    url: String,
    source: String,
    duration: String
  ]
});

中为数组中的嵌入属性创建新架构
var SongSchema = new Schema({
  title: String,
  url: String,
  source: String,
  duration: String
});

并将playlistSchema中的上述架构用作

var PlaylistSchema = new Schema({
  userid: {
    type: String,
    index: { unique: true }
  },
  playlist_name: String,
  songs: [SongSchema]
});