Reputation: 13162
I try like this :
<script type="text/javascript">
var club = [
{id:123, name:'chelsea'},
{id:456, name:'mu'},
{id:789, name:'liverpool'}
];
var newClub = club.map(function(element){
element.original = true;
element.kw = false;
return element;
});
console.log(newClub);
</script>
It works. But I want the key original and kw with id like this :
var club = [
{id:123, name:'chelsea', original123:true, kw123:false},
{id:456, name:'mu', original456:true, kw456:false},
{id:789, name:'liverpool', original789:true, kw789:false}
];
How can I do it?
Upvotes: 0
Views: 786
Reputation: 39322
You can use .map()
and Object.assign()
methods:
var data = [
{id:123, name:'chelsea'},
{id:456, name:'mu'},
{id:789, name:'liverpool'}
];
var result = data.map(o => Object.assign({}, o, {
['original' + o.id]: true,
['kw' + o.id]: false
}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 0
Reputation: 28445
For dynamic properties, you need to use bracket notation. For reference, Property accessors. Try following
var club = [{id: 123,name: 'chelsea'},{id: 456,name: 'mu'},{id: 789,name: 'liverpool'}];
var newClub = club.map(function(element) {
element['original' + element.id] = true;
element['kw' + element.id] = false;
return element;
});
console.log(newClub);
You can also simplify your code like following
var club = [{id: 123,name: 'chelsea'},{id: 456,name: 'mu'},{id: 789,name: 'liverpool'}];
let newClub = club.map(o => ({...o, [`original${o.id}`] : true, [`kw${o.id}`] : false}));
console.log(newClub);
Upvotes: 4
Reputation: 122027
You could use template literals to create dynamic property names.
var club = [
{id:123, name:'chelsea'},
{id:456, name:'mu'},
{id:789, name:'liverpool'}
];
var result = club.map(({id,...rest}) => ({
...rest,
[`original${id}`]: true,
[`kw${id}`]: false
}))
console.log(result)
Upvotes: 0
Reputation: 30453
You should use dynamic properties:
var newClub = club.map(function(element) {
element['original' + element.id] = true;
element['kw' + element.id] = false;
return element;
});
Upvotes: 5