【问题标题】:Nested loop not getting expected result嵌套循环没有得到预期的结果
【发布时间】:2021-11-03 06:21:04
【问题描述】:

我有数组,

现在我需要循环遍历所有选项卡名称并排除 exclude 中存在的值。

          json1  ={
        "sku Brand": "abc",
        "strngth": "ALL",
        "area": "",
        "Country": "",
        "local Brand": "",
        "theme": "HideDisNameFilters"
    }

    json2 = {
         "nav": [{
         "tabname": "tab1",
         "exclude':["area',"xyz"]
          },
          {
         "tabname": "tab2",
         "exclude":["Country"]
          }
            ]}

    var obj1 = json2.nav;
    console.log(obj1)
 Object.keys(obj1).forEach(function(prop) {
      var str1  = "";
      var maxLength =  Object.keys(json1).length-2
      Object.keys(json1).forEach(key => {
        var str  = "";
        var t1 = "";
        var index =  Object.keys(json1).indexOf(key);
        if(key != "theme"){
        if(!obj1[prop]['exclude'].includes(key)){
      str = key + "="+ json1[key];

          str1 +=str&
          console.log("str",str, " = ",str1 )
        if(maxLength == index){
         var t1 = "<a href="+str1 + "target='_blank'>"+ obj1[prop]['tabname'] +"</a>"
         final_array.push(t1)
        }
        }
        }
      });
      
    });

o/p 应该是:(它将通过从排除数组中检查来排除并形成 url,如下所示)

["<a href='sku+Brand=abc&Strngth=ALL&Country=&local+Brand=&' "target='_blank'>tab1<a>,"<a href='sku+Brand=abc&Strngth=ALL&area=&local+Brand=&' "target='_blank'>tab2<a>"]

AM 没有按预期得到正确的输出...

【问题讨论】:

  • 您的代码有不平衡的引号。先解决这些问题。
  • 我是 stackoverflow 的新手...@trincot 意义上的不平衡引号
  • 我删除了多余的引号@trincot

标签: javascript html jquery typescript


【解决方案1】:

您的代码有几个语法错误(不平衡的引号、不匹配的引号、尾随 &amp; 没有引号,...),以及尚未使用 varletconst 定义的变量。它分配给key_for_url,但从不使用该值。它引用了“slug”属性,但输入数据中不存在该属性。它假定普通对象中的某个键顺序,因为它在Object.keys 上使用indexOf。这是一种代码气味。变量名json1json2 描述性不是很好。

这是您可以使用的代码:

let filter = {
  "sku Brand": "abc",
  "strngth": "ALL",
  "area": "",
  "Country": "",
  "local Brand": "",
  "theme": "HideDisNameFilters"
}

let tabs = {
  "nav": [{
      "tabname": "tab1",
      "exclude": ["area", "xyz"]
    },
    {
      "tabname": "tab2",
      "exclude": ["Country"]
    }
  ]
}

let result = tabs.nav.map(({tabname, exclude}) =>
  `<a href='${
    Object.entries(filter)
      .filter(([key]) => !exclude.includes(key) && key != "theme")
      .map(([key, value]) => `${key}=${value}`)
      .join("&")
  }' target='_blank'>${tabname}</a>`
);

console.log(result);

【讨论】:

    【解决方案2】:

    解决方案:

    obj1 是一个数组,所以循环是 obj1.forEach,访问值是 prop['exclude']。 我把代码写得更短了。

        json1 = {
            "sku Brand": "abc",
            "strngth": "ALL",
            "area": "",
            "Country": "",
            "local Brand": "",
            "theme": "HideDisNameFilters"
        }
    
        json2 = {
            "nav": [{
                    "tabname": "tab1",
                    "exclude": ["area", "xyz"]
                },
                {
                    "tabname": "tab2",
                    "exclude": ["Country"]
                }
            ]
        }
    
        final_array = []
    
        var obj1 = json2.nav;
        obj1.forEach(function (prop) {
    
            let str = "";
            
            Object.keys(json1).forEach((key) => {
                if (!prop['exclude'].includes(key) && key !== 'theme') {
                    newKey = key.split(' ').join('+');
                    str = str + newKey + '=' + json1[key] + "&";
                }
            })
    
            var t1 = "<a href=" + "'" + str + "'" +  " target = '_blank' > "+ prop['tabname'] +" < /a>"
            final_array.push(t1)
    
        });
    
        
        console.log(final_array)

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多