skip to Main Content

i have an object data like this in my javascript code. When i have keys with filled values like title_en and description_en, i want to copy of its content to title_fr and description_fr.

This is my data

{
    "id": "2331",
    "title_en" : "Something great"
    "title_fr": "",
    "description_en" : "Lorem ipsum something etc."
    "description_fr": "", 
    "tag_en": "im filled",
    "tag_fr": "another filled",


}

this is how it should be

{
    "id": "2331",
    "title_en" : "Something great"
    "title_fr": "Something great",
    "description_en" : "Lorem ipsum something etc."
    "description_fr": "Lorem ipsum something etc.",
    "tag_en": "im filled",
    "tag_fr": "another filled",
}

how can i accomplish this with jquery or js?

2

Answers


  1. This should replace any _fr with its _en counterpart. I would personally check not just equality to "", but also possible undefined. But it depends on your data structure.

    let data = {"id": "42", "title_en": "something mildly great", "title_fr": "", "tag_en": "im filled...",  "tag_fr": ""};
    
    Object.keys(data).forEach(key => {
      if (key.endsWith("_en")){
        const frKey = key.replace("_en", "_fr");
        if (data[frKey] === ""){
          data[frKey] = data[key];
        } 
      }
    });
    
    console.log(data);
    
    Login or Signup to reply.
  2. After spending a good time to work on this requirement, Here I am with the solution. Please give a try to this solution. It will work for multiple substrings separated by underscore as well.

    Live Demo (Descriptive comments has been added into the below code snippet) :

    const obj = {
      "id": "2331",
      "title_en" : "Something great",
      "title_fr": "",
      "description_en" : "Lorem ipsum something etc.",
      "description_fr": "", 
      "tag_en": "im filled",
      "tag_fr": "another filled"
    }
    
    // Iterating over object keys
    Object.keys(obj).forEach(key => {
      // checking for the keys which dont have values
      if (!obj[key]) {
        // storing key in a temporary variable for future manipulations. 
        const temp = key;
        // Now splitting the key based on underscore.
        const splittedStr = temp.split('_');
        // now creating substring which will contain without lingual. i.e _en, _fr
        const concatStr = splittedStr.slice(0, splittedStr.length - 1).join('_')
        // assigning the value dynamically to the empty keys.
        obj[key] = (splittedStr.at(-1) === 'fr') ? obj[`${concatStr}_en`] : obj[`${concatStr}_fr`]
      }
    });
    
    // output
    console.log(obj);
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search