【问题标题】:Splice with nodejs, mongoose and array of JSON objects与 nodejs、mongoose 和 JSON 对象数组拼接
【发布时间】:2012-02-03 15:53:35
【问题描述】:

我在 nodejs 中使用 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 示例,以确保 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

【问题讨论】:

    标签: javascript arrays json node.js mongoose


    【解决方案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]
    });
    

    【讨论】:

      【解决方案2】:

      经过一番挫折后,我终于弄清楚了这个问题。事实证明,我的模式中没有正确设置返回的对象数组。我需要定义一个将在数组中的对象,然后对于架构中的该属性有类似的东西。

      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]
      });
      

      在那之后工作。

      【讨论】:

        【解决方案3】:

        发件人:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

        返回

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

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

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

        【讨论】:

        • 它确实删除了元素,只是我需要将返回的值粘贴到新位置。我正在尝试将元素从其原始位置移动到新位置。所以我有点需要元素使用 .splice(index, 0, element) 将其粘贴回新索引中。
        猜你喜欢
        • 2021-06-01
        • 2022-11-20
        • 1970-01-01
        • 1970-01-01
        • 2019-10-16
        • 2014-05-25
        • 1970-01-01
        • 2018-06-30
        • 2021-10-02
        相关资源
        最近更新 更多