How Could I loop only once to get a new array with new data structure on conditions from the origin array?

Viewed 42

assume I have an array as my origin data set

const users = [
{id: 1, name: 'userOne', age: 23, licenseNumber: '95273380'},
{id: 2, name: 'userTwo', age: 21, licenseNumber: '95273381'},
{id: 3, name: 'userThree', age: 18, licenseNumber: ''},
{id: 4, name: 'userFour', age: 2, licenseNumber: '95273382'},
{id: 5, name: 'userFive', age: 77, licenseNumber: null},
{id: 6, name: 'userSix', age: 35, licenseNumber: '95273383'},
]

and now I want to create an new array base on it by conditions and with a new data structure

  1. need to filter all users if liscenNumber is empty or null.
  2. create key value pair return (licenseNumber as key, name as value)

(So far i tried filiter() method, But is only handle conditions, there no way i can custom a new data structure to return)

1 Answers

Here you are, you can just use filter to filter - then map to build your new array.

 const users = [
        {
            "id": 1,
            "name": "userOne",
            "age": 23,
            "licenseNumber": "95273380"
        },
        {
            "id": 2,
            "name": "userTwo",
            "age": 21,
            "licenseNumber": "95273381"
        },
        {
            "id": 3,
            "name": "userThree",
            "age": 18,
            "licenseNumber": ""
        },
        {
            "id": 4,
            "name": "userFour",
            "age": 2,
            "licenseNumber": "95273382"
        },
        {
            "id": 5,
            "name": "userFive",
            "age": 77,
            "licenseNumber": null
        },
        {
            "id": 6,
            "name": "userSix",
            "age": 35,
            "licenseNumber": "95273383"
        }
    ]
    
   const result = users.filter(x => x.licenseNumber).map(x => ({[x.licenseNumber]: x.name}));
   
   console.log(result);

EDIT:

If you wanted to avoid map and filter and only iterate over the array once - then just use a for loop, or forEach, etc and manually build your result array, e.g.

let result = [];

users.forEach(x => x.licenseNumber && result.push({
  [x.licenseNumber]: x.name
}))
Related