I am trying to add a key to an Object of Array as isActive: true,
and then I want to find the object in the actual array with the same label as that of selectedFilterList and replace it in this.bindingData else add isActive: false
if (this.selectedFilterList && this.selectedFilterList.length) {
//Do something
} else {
this.bindingData = this.data.map((value) => {
var newKey = Object.assign({}, value);
newKey.isActive = false;
return newKey;
});
}
this.data = [
{ label: "Audi", value: "Audi" },
{ label: "BMW", value: "BMW" },
{ label: "Fiat", value: "Fiat" },
{ label: "Honda", value: "Honda" },
{ label: "Jaguar", value: "Jaguar" },
{ label: "Mercedes", value: "Mercedes" },
{ label: "Renault", value: "Renault" },
{ label: "VW", value: "VW" },
{ label: "Volvo", value: "Volvo" },
];
this.selectedFilterList = [
{ label: "Audi", value: "Audi", isActive: true },
{ label: "Fiat", value: "Fiat", isActive: true },
{ label: "BMW", value: "BMW", isActive: true },
];
I have tried this which is working but i don’t think so its a best approach
if (this.selectedFilterList && this.selectedFilterList.length) {
this.bindingData = this.data.map(value => {
var newKey = Object.assign({}, value);
newKey.isActive = false;
return newKey;
});
this.bindingData.map(data => {
this.selectedFilterList.forEach(value => {
if (value.label == data.label) {
data.isActive = value.isActive;
}
});
});
} else {
this.bindingData = this.data.map(value => {
var newKey = Object.assign({}, value);
newKey.isActive = false;
return newKey;
});
}
Advertisement
Answer
You can use Array.prototype.reduce() on data, check if each item in data is present in selectedFilterList using Array.prototype.some() and add isActive flag value accordingly. Here is the sample code:
var bindingData = data.reduce((acc,datum)=>{
if(selectedFilterList.some((item,index)=>(item.value === datum.value))){
return acc.concat({...datum,isActive:true});
}
return acc.concat({...datum,isActive:false});
},[]);