我需要帮助以javascript(下划线)控制循环及其条件,以正确格式化数组

我需要帮助以javascript(下划线)控制循环及其条件,以正确格式化数组,javascript,underscore.js,Javascript,Underscore.js,我正在尝试创建一个对象数组,这些对象将被发布到按timeToEat和DayOfWeek细分的菜单中。它应该在daysOfWeek数组中的每个索引上循环,如果对象的daysOfWeek(来自db)与daysOfWeek的索引匹配(“tue”==“tue”),它应该在适当的槽中输入记录 数据库中的记录如下所示: { "timeToEat" : "amSnack", "dayOfTheWeek" : "tue", "onTheMenu" : "apples", "_id" : "xT

我正在尝试创建一个对象数组,这些对象将被发布到按timeToEat和DayOfWeek细分的菜单中。它应该在daysOfWeek数组中的每个索引上循环,如果对象的daysOfWeek(来自db)与daysOfWeek的索引匹配(“tue”==“tue”),它应该在适当的槽中输入记录

数据库中的记录如下所示:

{ "timeToEat" : "amSnack", 
  "dayOfTheWeek" : "tue", 
  "onTheMenu" : "apples", 
  "_id" : "xTziTnHYmgh5obYDB" }
amSnacks: function() {      
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["mon", "tue", "wed", "thu", "fri"];
    var NA = {onTheMenu: "N/A"};    
    var eatingTimes = [];

    _.each(daysOfWeek, function(day){
        _.each(amSnacks, function(amSnack){
            if (amSnack.dayOfTheWeek === day) {
                eatingTimes.push(amSnack);
            } else {
                eatingTimes.push(NA);
            }
        });
    });
    // console.log(eatingTimes);
    return eatingTimes;
   }
eatingTimes:  [
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "xTziTnHYmgh5obYDB"
dayOfTheWeek: "tue"
onTheMenu: "apples"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "yebkabPurnyQjqb5u"
dayOfTheWeek: "fri"
onTheMenu: "cereal"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
]
amSnacks: function() {
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["0", "1", "2", "3", "4"];
    var eatingTimes = [];

    var i, j;

    for(i = 0; i < daysOfWeek.length; i++) {
        for(j = 0; j < amSnacks.length; j++) {
            if (daysOfWeek[i] === amSnacks[j].dayOfTheWeek) 
                eatingTimes.push(amSnacks[j]);
        }

        var amSnacksArrayFromDb = [];

        _.map(eatingTimes, function(amSnack) {
            amSnacksArrayFromDb.push(amSnack.dayOfTheWeek);
        });

        var missingDaysOfWeek = _.difference(daysOfWeek, amSnacksArrayFromDb);

        var missingDaysNA = [];
        _.map(missingDaysOfWeek, function(day) {
            var NA = { dayOfTheWeek: day, onTheMenu: "N/A"};
            missingDaysNA.push(NA);
        });

        var eatingTimesArray = eatingTimes.concat(missingDaysNA);

        var finalAMSnackTimes = 
        _.sortBy(eatingTimesArray, function(amSnack){
            return amSnack.dayOfTheWeek;
        });
    }

    return finalAMSnackTimes;
},
在mongoDB中查找AMN的JS方法:

{ "timeToEat" : "amSnack", 
  "dayOfTheWeek" : "tue", 
  "onTheMenu" : "apples", 
  "_id" : "xTziTnHYmgh5obYDB" }
amSnacks: function() {      
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["mon", "tue", "wed", "thu", "fri"];
    var NA = {onTheMenu: "N/A"};    
    var eatingTimes = [];

    _.each(daysOfWeek, function(day){
        _.each(amSnacks, function(amSnack){
            if (amSnack.dayOfTheWeek === day) {
                eatingTimes.push(amSnack);
            } else {
                eatingTimes.push(NA);
            }
        });
    });
    // console.log(eatingTimes);
    return eatingTimes;
   }
eatingTimes:  [
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "xTziTnHYmgh5obYDB"
dayOfTheWeek: "tue"
onTheMenu: "apples"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "yebkabPurnyQjqb5u"
dayOfTheWeek: "fri"
onTheMenu: "cereal"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
]
amSnacks: function() {
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["0", "1", "2", "3", "4"];
    var eatingTimes = [];

    var i, j;

    for(i = 0; i < daysOfWeek.length; i++) {
        for(j = 0; j < amSnacks.length; j++) {
            if (daysOfWeek[i] === amSnacks[j].dayOfTheWeek) 
                eatingTimes.push(amSnacks[j]);
        }

        var amSnacksArrayFromDb = [];

        _.map(eatingTimes, function(amSnack) {
            amSnacksArrayFromDb.push(amSnack.dayOfTheWeek);
        });

        var missingDaysOfWeek = _.difference(daysOfWeek, amSnacksArrayFromDb);

        var missingDaysNA = [];
        _.map(missingDaysOfWeek, function(day) {
            var NA = { dayOfTheWeek: day, onTheMenu: "N/A"};
            missingDaysNA.push(NA);
        });

        var eatingTimesArray = eatingTimes.concat(missingDaysNA);

        var finalAMSnackTimes = 
        _.sortBy(eatingTimesArray, function(amSnack){
            return amSnack.dayOfTheWeek;
        });
    }

    return finalAMSnackTimes;
},

如果我添加另一条记录:

{ "timeToEat" : "amSnack", 
  "dayOfTheWeek" : "tue", 
  "onTheMenu" : "apples", 
  "_id" : "xTziTnHYmgh5obYDB" }
amSnacks: function() {      
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["mon", "tue", "wed", "thu", "fri"];
    var NA = {onTheMenu: "N/A"};    
    var eatingTimes = [];

    _.each(daysOfWeek, function(day){
        _.each(amSnacks, function(amSnack){
            if (amSnack.dayOfTheWeek === day) {
                eatingTimes.push(amSnack);
            } else {
                eatingTimes.push(NA);
            }
        });
    });
    // console.log(eatingTimes);
    return eatingTimes;
   }
eatingTimes:  [
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "xTziTnHYmgh5obYDB"
dayOfTheWeek: "tue"
onTheMenu: "apples"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "yebkabPurnyQjqb5u"
dayOfTheWeek: "fri"
onTheMenu: "cereal"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
]
amSnacks: function() {
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["0", "1", "2", "3", "4"];
    var eatingTimes = [];

    var i, j;

    for(i = 0; i < daysOfWeek.length; i++) {
        for(j = 0; j < amSnacks.length; j++) {
            if (daysOfWeek[i] === amSnacks[j].dayOfTheWeek) 
                eatingTimes.push(amSnacks[j]);
        }

        var amSnacksArrayFromDb = [];

        _.map(eatingTimes, function(amSnack) {
            amSnacksArrayFromDb.push(amSnack.dayOfTheWeek);
        });

        var missingDaysOfWeek = _.difference(daysOfWeek, amSnacksArrayFromDb);

        var missingDaysNA = [];
        _.map(missingDaysOfWeek, function(day) {
            var NA = { dayOfTheWeek: day, onTheMenu: "N/A"};
            missingDaysNA.push(NA);
        });

        var eatingTimesArray = eatingTimes.concat(missingDaysNA);

        var finalAMSnackTimes = 
        _.sortBy(eatingTimesArray, function(amSnack){
            return amSnack.dayOfTheWeek;
        });
    }

    return finalAMSnackTimes;
},
{“timeToEat”:“amSnack”, “星期二”:“星期二”, “onTheMenu”:“苹果”, “_id”:“xTziTnHYmgh5obYDB”}

{“timeToEat”:“amSnack”, “星期五”:“星期五”, “onTheMenu”:“谷物”, “_id”:“yebkabPurnyQjqb5u”}

console.log(eatingTimes):

{ "timeToEat" : "amSnack", 
  "dayOfTheWeek" : "tue", 
  "onTheMenu" : "apples", 
  "_id" : "xTziTnHYmgh5obYDB" }
amSnacks: function() {      
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["mon", "tue", "wed", "thu", "fri"];
    var NA = {onTheMenu: "N/A"};    
    var eatingTimes = [];

    _.each(daysOfWeek, function(day){
        _.each(amSnacks, function(amSnack){
            if (amSnack.dayOfTheWeek === day) {
                eatingTimes.push(amSnack);
            } else {
                eatingTimes.push(NA);
            }
        });
    });
    // console.log(eatingTimes);
    return eatingTimes;
   }
eatingTimes:  [
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "xTziTnHYmgh5obYDB"
dayOfTheWeek: "tue"
onTheMenu: "apples"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "yebkabPurnyQjqb5u"
dayOfTheWeek: "fri"
onTheMenu: "cereal"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
]
amSnacks: function() {
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["0", "1", "2", "3", "4"];
    var eatingTimes = [];

    var i, j;

    for(i = 0; i < daysOfWeek.length; i++) {
        for(j = 0; j < amSnacks.length; j++) {
            if (daysOfWeek[i] === amSnacks[j].dayOfTheWeek) 
                eatingTimes.push(amSnacks[j]);
        }

        var amSnacksArrayFromDb = [];

        _.map(eatingTimes, function(amSnack) {
            amSnacksArrayFromDb.push(amSnack.dayOfTheWeek);
        });

        var missingDaysOfWeek = _.difference(daysOfWeek, amSnacksArrayFromDb);

        var missingDaysNA = [];
        _.map(missingDaysOfWeek, function(day) {
            var NA = { dayOfTheWeek: day, onTheMenu: "N/A"};
            missingDaysNA.push(NA);
        });

        var eatingTimesArray = eatingTimes.concat(missingDaysNA);

        var finalAMSnackTimes = 
        _.sortBy(eatingTimesArray, function(amSnack){
            return amSnack.dayOfTheWeek;
        });
    }

    return finalAMSnackTimes;
},

您可以看到,如果有多条记录,则格式设置将全部关闭。如果在星期一有匹配项,我如何返回一个数组,只将正确的零食放在正确的位置,如果没有匹配项,则为该特定工作日推送NA而不创建太多NA条目?

工作解决方案:

{ "timeToEat" : "amSnack", 
  "dayOfTheWeek" : "tue", 
  "onTheMenu" : "apples", 
  "_id" : "xTziTnHYmgh5obYDB" }
amSnacks: function() {      
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["mon", "tue", "wed", "thu", "fri"];
    var NA = {onTheMenu: "N/A"};    
    var eatingTimes = [];

    _.each(daysOfWeek, function(day){
        _.each(amSnacks, function(amSnack){
            if (amSnack.dayOfTheWeek === day) {
                eatingTimes.push(amSnack);
            } else {
                eatingTimes.push(NA);
            }
        });
    });
    // console.log(eatingTimes);
    return eatingTimes;
   }
eatingTimes:  [
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "xTziTnHYmgh5obYDB"
dayOfTheWeek: "tue"
onTheMenu: "apples"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
, 
Object
_id: "yebkabPurnyQjqb5u"
dayOfTheWeek: "fri"
onTheMenu: "cereal"
timeToEat: "amSnack"
__proto__: Object
, 
Object
onTheMenu: "N/A"
__proto__: Object
]
amSnacks: function() {
    var amSnacks = EatingTimes.find({timeToEat: "amSnack"}, {sort: {dayOfTheWeek: 1}}).fetch();
    var daysOfWeek = ["0", "1", "2", "3", "4"];
    var eatingTimes = [];

    var i, j;

    for(i = 0; i < daysOfWeek.length; i++) {
        for(j = 0; j < amSnacks.length; j++) {
            if (daysOfWeek[i] === amSnacks[j].dayOfTheWeek) 
                eatingTimes.push(amSnacks[j]);
        }

        var amSnacksArrayFromDb = [];

        _.map(eatingTimes, function(amSnack) {
            amSnacksArrayFromDb.push(amSnack.dayOfTheWeek);
        });

        var missingDaysOfWeek = _.difference(daysOfWeek, amSnacksArrayFromDb);

        var missingDaysNA = [];
        _.map(missingDaysOfWeek, function(day) {
            var NA = { dayOfTheWeek: day, onTheMenu: "N/A"};
            missingDaysNA.push(NA);
        });

        var eatingTimesArray = eatingTimes.concat(missingDaysNA);

        var finalAMSnackTimes = 
        _.sortBy(eatingTimesArray, function(amSnack){
            return amSnack.dayOfTheWeek;
        });
    }

    return finalAMSnackTimes;
},
amf:function(){
var amsnakts=EatingTimes.find({timeToEat:“amsnakt”},{sort:{dayofweek:1}}).fetch();
var daysOfWeek=[“0”、“1”、“2”、“3”、“4”];
var eatingTimes=[];
varⅠ,j;
对于(i=0;i
db记录看起来像:“{”timeToEat:“amSnack”,“dayofweek:“0”,“onTheMenu:“apples”,“u id:“xTziTnHYmgh5obYDB”}”