-1

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

1
  • 2
    What have you tried and what isn't working as expected? Commented Sep 8, 2022 at 10:53

3 Answers 3

2

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

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

Comments

1

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)

Comments

1

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"]);
    })

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.