【问题标题】:Loop through array of object where it's elements contains array of elements that can be repeated, then return match遍历对象数组,其中元素包含可以重复的元素数组,然后返回匹配
【发布时间】:2020-09-13 12:40:48
【问题描述】:

我遇到了循环问题。我的 JSON 在最后的链接中。

//用户可以选择他想要的任何编程语言和平台(或不选择),例如,它将被写入变量 uProgLanguPlatform 中:

let uProgLang = "java";
let uPlatform = "Google Dialogflow";

let coupon = await Coupon.find({ 'programming_language': [uProgLang], 'chatbot_platform': [uPlatform ] }).map(function(item){
            if(programming_language.item == uProgLang || chatbot_platform.item == uPlatform )
                return coupon.link;
        });
if (coupon !== null ) {
      if(coupon.programming_language && coupon.chatbot_platform)
            responseText = `${uProgLang} for ${uPlatform} is available on: ${coupon.link}`;
      else if(coupon.programming_language)  
            responseText = `${uProgLang} is available on: ${coupon.link}`;
      else if(coupon.chatbot_platform)  
            responseText = `${uPlatform} is available on: ${coupon.link}`;
}else 
      responseText = `Here is link to all...`;

my JSON document

【问题讨论】:

    标签: javascript arrays json dictionary find


    【解决方案1】:

    试试下面的代码:

    const coupons = await Coupon.find({
      $or: [{ programming_language: uProgLang }, { chatbot_platform: uPlatform }],
    });
    
    const couponsBoth = coupons.filter(
      (c) =>
        c.programming_language.includes(uProgLang) &&
        c.chatbot_platform.includes(uPlatform)
    );
    const couponsOnlyProgLang = coupons.filter(
      (c) =>
        c.programming_language.includes(uProgLang) &&
        !c.chatbot_platform.includes(uPlatform)
    );
    const couponsOnlyPlatform = coupons.filter(
      (c) =>
        !c.programming_language.includes(uProgLang) &&
        c.chatbot_platform.includes(uPlatform)
    );
    
    let responseText = "";
    
    // Both
    responseText += `${uProgLang} for ${uPlatform} is available on these links: \n${couponsBoth
      .map((c) => c.link)
      .join("\n")}\n`;
    // Only Language
    responseText += `${uProgLang} is available on these links: \n${couponsOnlyProgLang
      .map((c) => c.link)
      .join("\n")}\n`;
    // Only platform
    responseText += `${uPlatform} is available on these links: \n${couponsOnlyPlatform
      .map((c) => c.link)
      .join("\n")}\n`;
    

    您应该能够调整响应以符合您的想法。

    【讨论】:

    • 首先,感谢您的超快回复!我们很接近,但使用这种方法,它只会给我返回它找到的第一个,而不是在://两者 - 不给我所有包含 uProgLang 和 uPlatform 的链接,只是它识别的第一个 // 仅语言 -不要给我所有只包含 uProgLang 的链接。相反,我只得到它识别的第一个 // 唯一平台 - 根本不给我返回链接,它只包含 uPlatform。只返回文本
    • 例如我从这段代码中得到了确切的回应:“Java for Google Dialogflow 在这些链接上可用:amazon.com/1Java 在这些链接上可用:amazon.com/2 Google Dialogflow 在这些链接上可用:”
    【解决方案2】:

    我找到了解决方案,所以我想为社区做出贡献(顺便说一下,这是我的第一个问题,现在这是我在 stackoverflow yuuhuuu 上的第一个答案!..感到自豪)

    //-------------------------- JSON_beginning --------------------------
    const books = [
        {
            _id: { oid: "1" },
            programming_language: ["nodejs"],
            chatbot_platform: ["Google Dialogflow"],
            link: "https://www.amazon.com/1"
        },
        {
            _id: { oid: "2" },
            programming_language: ["python"],
            chatbot_platform: ["NLP"],
            link: "https://www.amazon.com/2"
        },
        {
            _id: { oid: "3" },
            programming_language: ["c#"],
            chatbot_platform: ["Microsoft Bot Framework"],
            link: "https://www.amazon.com/3"
        },
        {
            _id: { oid: "4" },
            programming_language: ["python", "java"],
            chatbot_platform: ["NLP", "Rasa", "Google Dialogflow", "Microsoft Bot Framework"],
            link: "https://www.amazon.com/4"
        },
        {
            _id: { oid: "5" },
            programming_language: ["ruby"],
            chatbot_platform: [""],
            link: "https://www.amazon.com/5"
        },
        {
            _id: { oid: "6" },
            programming_language: ["typescript"],
            chatbot_platform: ["Microsoft Bot Framework"],
            link: "https://www.amazon.com/6"
        },
        {
            _id: { oid: "7" },
            programming_language: ["python"],
            chatbot_platform: ["NLP"],
            link: "https://www.amazon.com/7"
        },
        {
            _id: { oid: "8" },
            programming_language: ["java", "nodejs"],
            chatbot_platform: ["Twilio", "Alexa Skills", "Google Dialogflow", "Microsoft Bot Framework", "Chatfuel"],
            link: "https://www.amazon.com/8"
        },
        {
            _id: { oid: "9" },
            programming_language: [""],
            chatbot_platform: ["Google Dialogflow"],
            link: "https://www.amazon.com/9"
        },
        {
            _id: { oid: "10" },
            programming_language: ["nodejs"],
            chatbot_platform: ["Amazon Lex"],
            link: "https://www.amazon.com/10"
        },
        {
            _id: { oid: "11" },
            programming_language: ["c#"],
            chatbot_platform: ["Microsoft Bot Framework"],
            link: "https://www.amazon.com/111"
        }
    ]
    //-------------------------- JSON_end --------------------------
    
    
    // Inside those 2 variables put any programming language and/or any platform contained in JSON object, or none
    let uProgLang = "";
    let uPlatform = "";
    
    
    console.log(` \n ******************************************************************* `);
    console.log(' ************************** beginning ****************************** ');
    console.log(' ******************************************************************* ');
    
    /* Just add this before for searching through database
    const books = await Coupon.find({
      $or: [{ programming_language: uProgLang }, { chatbot_platform: uPlatform }],
    }); */
    // Only programming language selected
    const arrayOfObjMatchedProgLang = books.filter(function (k) {
      if(uProgLang !=="")
        return k.programming_language.includes(uProgLang);
    }).map(function (l) { return l.link });
    console.log(arrayOfObjMatchedProgLang); 
    
    console.log(' ------------------------------------------------------------------- ');
    
    
    // Only platform selected
    const arrayOfObjMatchedPlatform = books.filter(function (k) {
      if(uPlatform !=="")
        return k.chatbot_platform.includes(uPlatform);
    }).map(function (l) { return l.link });
    console.log(arrayOfObjMatchedPlatform);
    
    console.log(' ------------------------------------------------------------------- ');
    
    // Both programming language & platform selected
    let intersection = arrayOfObjMatchedProgLang.filter(x => arrayOfObjMatchedPlatform.includes(x));
    console.log(intersection);
    
    
    
    console.log(` \n ******************** Printing text with links *********************\n `);
    // ***** Printing text with links *****
    let responseText;
    
    // Both selected
    if (uProgLang && uPlatform)
      responseText = `Books for ${uProgLang} programming language with ${uPlatform} chatbot platform is available on:\n` +intersection.join("\n");
    // Only programming language
    else if (uProgLang)
      responseText = `Books for ${uProgLang} programming language is available on:\n` +arrayOfObjMatchedProgLang.join("\n");
    // Only platform
    else if (uPlatform)
      responseText = `Books for ${uPlatform} chatbot platform is available on:\n` +arrayOfObjMatchedPlatform.join("\n");
    // Neither one selected  
    else
      responseText = `Here is some random link :) \n`+
    `https://ctl.s6img.com/society6/img/5gOI6Pvx09XYIfUVhBXh9qTr1oo/w_700/prints/~artwork/s6-original-art-uploads/society6/uploads/misc/fa0dafda81cb466ca8b06922f36e7690/~~/cute-penguins-a-cute-illustrated-penguin-in-blue-and-white-t-shirt-design-hearts-cool-penguin-dab-prints.jpg`;
    console.log(responseText);
    
    
    
    console.log(` \n ******************************************************************* `);
    console.log(' **************** end - thx for helping people ********************* ');
    console.log(' ******************************************************************* ');

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2019-02-16
      • 2012-12-03
      • 1970-01-01
      • 2019-10-06
      • 2012-10-25
      相关资源
      最近更新 更多