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)