Home > OS >  JavaScript create new array
JavaScript create new array

Time:09-09

I want to create a new array by comparing the object values ​​in the array with the related array values.

const vehicleList = [
      {
         "_id": "6294790e2fe156d20868b39e",
         "category_id_tr": "Motosiklet",
         "category_name_tr": "A1",
         "category_desc_tr": "Silindir hacmi 125 santimetreküpü, gücü 11 kilovatı ve gücünün ağırlığına oranı 0,1’i geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.",
            "limit_age_tr": 16,
            "validity_years_tr": 10
      },
      {
         "_id": "6294790e2fe156d20868b39f",
         "category_id_tr": "Motosiklet",
         "category_name_tr": "A2",
         "category_desc_tr": "Gücü 35 kilovatı ve gücünün ağırlığına oranı 0,2’yi geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.",
         "limit_age_tr": 18,
         "validity_years_tr": 10
      }
    ]

I want to compare the id values ​​of this array with the values ​​of this array

const allowedVehicle = ['6294790e2fe156d20868b39e', '6294790e2fe156d20868b39f']

I need to create a new array by matching the values ​​in the allowedVehicle array with the _id values ​​in the vehicleList.

expected result:


    [
        {
            "value":"6294790e2fe156d20868b39e",
            "label": "A1"
        },
        {
            "value":"6294790e2fe156d20868b39f",
            "label": "A2"
        },
    ]

how can I create a new array based on matching values ​​by comparing

CodePudding user response:

You can do this by using Javascript Array filter and map methods. You will use map to generate a new object array with only the information you need and then you can filter by the id's (or vice-versa).

    vehicleList.map(vehicle => {
      return {
            value: vehicle["_id"],
            label: vehicle.category_name_tr
        };
    }).filter(vehicle => {
      return allowedVehicle.includes(vehicle["value"]);
    })

CodePudding user response:

You could use Array.reduce() to create the desired output.

This approach basically combines a map and filter in one call.

I'd also suggest creating a Set from the allowedVehicle array, the .has call on a Set will be more efficient than an array.includes() or .find().

const vehicleList = [ { "_id": "6294790e2fe156d20868b39e", "category_id_tr": "Motosiklet", "category_name_tr": "A1", "category_desc_tr": "Silindir hacmi 125 santimetreküpü, gücü 11 kilovatı ve gücünün ağırlığına oranı 0,1’i geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.", "limit_age_tr": 16, "validity_years_tr": 10 }, { "_id": "6294790e2fe156d20868b39f", "category_id_tr": "Motosiklet", "category_name_tr": "A2", "category_desc_tr": "Gücü 35 kilovatı ve gücünün ağırlığına oranı 0,2’yi geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.", "limit_age_tr": 18, "validity_years_tr": 10 } ] 

const allowedVehicle = new Set(['6294790e2fe156d20868b39e', '6294790e2fe156d20868b39f']);

const result = vehicleList.reduce((acc, {_id: value, category_name_tr: label}) => { 
    return allowedVehicle.has(value) ? acc.concat([{ value, label}]): acc;
}, [])

console.log('Result:', result);
.as-console-wrapper { max-height: 100% !important; }

CodePudding user response:

You can use Array.includes, Array.filter and Array.map functions combined.

const vehicleList = [{
    "_id": "6294790e2fe156d20868b39e",
    "category_id_tr": "Motosiklet",
    "category_name_tr": "A1",
    "category_desc_tr": "Silindir hacmi 125 santimetreküpü, gücü 11 kilovatı ve gücünün ağırlığına oranı 0,1’i geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.",
    "limit_age_tr": 16,
    "validity_years_tr": 10
  },
  {
    "_id": "6294790e2fe156d20868b39f",
    "category_id_tr": "Motosiklet",
    "category_name_tr": "A2",
    "category_desc_tr": "Gücü 35 kilovatı ve gücünün ağırlığına oranı 0,2’yi geçmeyen, sepetli veya sepetsiz iki tekerlekli motosikletler ile gücü 15 kilovatı geçmeyen üç tekerlekli motosikletler.",
    "limit_age_tr": 18,
    "validity_years_tr": 10
  }
]

const allowedVehicle = ['6294790e2fe156d20868b39e', '6294790e2fe156d20868b39f']

const result = vehicleList.filter(item =>  allowedVehicle.includes(item._id)).map(({
  _id,
  category_name_tr
}) => ({
  value: _id,
  label: category_name_tr
}))

console.log(result)

  • Related