Reputation: 382
I am using angular 5. I need to update the array value based selectedMobile. My coding :
const mobilelist = [
{ 'key': 'apple', 'name': 'Apple', 'checked': false },
{ 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
{ 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
{ 'key': 'mi', 'name': 'Mi', 'checked': false }
];
const selectedMobile = ['apple'];
const newmobilelist: any = [];
if (selectedMobile.length > 0) {
mobilelist.forEach(element => {
if (selectedMobile.find(x => x == element.key) != null) {
newmobilelist.push({ 'key': element.key, 'name': element.name, 'checked': true });
} else {
newmobilelist.push({ 'key': element.key, 'name': element.name, 'checked': false });
}
});
}
console.log(newmobilelist);
In console, I am expecting result like :
[
{ 'key': 'apple', 'name': 'Apple', 'checked': true },
{ 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
{ 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
{ 'key': 'mi', 'name': 'Mi', 'checked': false }
];
But above code return like :
[
{ 'key': 'apple', 'name': 'Apple', 'checked': false },
{ 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
{ 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
{ 'key': 'mi', 'name': 'Mi', 'checked': false }
];
I don't why?, Please help to resolve...
Upvotes: 2
Views: 11769
Reputation: 15313
As already said, your code seems to be working fine. However, it's unnecessarily complicated, you can drastically shrink it like this.
const mobilelist = [
{ 'key': 'apple', 'name': 'Apple', 'checked': false },
{ 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
{ 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
{ 'key': 'mi', 'name': 'Mi', 'checked': false }
];
const selectedMobile = ['apple'];
const newmobilelist = mobilelist.map(x => { x.checked = selectedMobile.includes(x.key); return x});
console.log(newmobilelist)
Upvotes: 6