0

Am having the arrays,

Now i need to get all tab names looping through and exclude the values present in 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 should be: (it will exclude and form the url by checking from exclude array as below)

["<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 not getting the correct output as expected...

3
  • Your code has unbalanced quotes. Fix those first. Commented Sep 6, 2021 at 6:18
  • Am new to stackoverflow... unbalanced quotes in the sense @trincot Commented Sep 6, 2021 at 6:22
  • i have removed extra quotes @trincot Commented Sep 6, 2021 at 6:26

2 Answers 2

1

Your code has several syntax errors (unbalanced quotes, mismatching quotes, trailing & without quotes, ...), and variables that have not been defined with var, let or const. It assigns to key_for_url, but never uses that value. It references a "slug" property, but that doesn't exist in your input data. It assumes a certain key order in plain objects, as it uses indexOf on Object.keys. This is a code smell. Variable names json1 and json2 are not very descriptive.

Here is code you could use:

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

Sign up to request clarification or add additional context in comments.

Comments

0

Solution:

obj1 is an array, so the loop will be obj1.forEach and accessing the value will be prop['exclude']. I have made the code a bit more short.

    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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.