Search code examples
javascriptfunctionmap-function

how can i get full name and age in javascript?


hello currently i learning javascript alone, i have a question!

question

let arr = [
  [
    ['firstName', 'Joe'],
    ['age', 42],
    ['gender', 'male'],
  ],
  [
    ['firstName', 'Mary'],
    ['lastName', 'Jenkins'],
    ['age', 36],
    ['gender', 'female'],
  ],
  [
    ['lastName', 'Kim'],
    ['age', 40],
    ['gender', 'female'],
  ],
];

This is what I wrote

function test5(arr) {
 let result =[]
  arr.map(function(ele){
    for(let i=0; i < ele.length; i++){
       if(ele[i][0]==='firstName'||ele[i][0]==='lastName'){
         result.push(ele[i][1])
       }
       if(ele[i][0]==='age'){
         result.push(ele[i][1])
       }
    }
  })
  return result
}

rule.

  • if person have first and full name (both) then have to be combined

i want to get value like this let result = [ ["Joe", 42] [" Mary Jenkins", 36] , ["Kim", 40] ]


Solution

  • You can try to convert the nested array into Array of objects and carry out object iteration

    let arr = [
      [
        ["firstName", "Joe"],
        ["age", 42],
        ["gender", "male"]
      ],
      [
        ["firstName", "Mary"],
        ["lastName", "Jenkins"],
        ["age", 36],
        ["gender", "female"]
      ],
      [
        ["lastName", "Kim"],
        ["age", 40],
        ["gender", "female"]
      ]
    ];
    
    
    const createObject = a => {
      const res = {};
      for (let el of a) {
        res[el[0]] = el[1];
      }
      return res;
    };
    
    const results = [];
    arr.forEach(a => {
      if (a && a.length !== 0) {
        const destructedArray = createObject(a);
    
        destructedArray["name"] = "";
        if (destructedArray.firstName && destructedArray.lastName) {
          destructedArray.name = `${destructedArray.firstName}, ${destructedArray.lastName}`;
        } else if (destructedArray.lastName) {
          destructedArray.name = `${destructedArray.lastName}`;
        } else {
          destructedArray.name = `${destructedArray.firstName}`;
        }
        results.push([destructedArray.name, destructedArray.age]);
      }
    });
    
    console.log(results);