Reputation: 647
I have been stuck on this awhile. Found a lot of example on how to remove based on key, but not on value.
I am trying to remove all keys that have value false.
Any help would be appreciated, It seems Object.keys only accesses keys, val seems to have no effect.
const names = {
1: false,
2: true,
3: true,
5: false
}
const newNames = Object.keys(names).reduce((object, key, val) => {
console.info('propName', key);
if (object[val] == true) {
object[key] = names[key];
}
return object;
}, {});
console.info('test', newNames);
// expected output I want should be {2:true, 3:true}
Any help would be appreciated.
Upvotes: 0
Views: 132
Reputation: 1684
Object.keys(names).map(val => { if(names[val] == false) { delete names[val] } });
Upvotes: 0
Reputation: 1040
const names = {
1: false,
2: true,
3: true,
5: false
}
for(let name of Object.keys(names)) {
if(names[name] === false) {
delete names[name];
}
}
Upvotes: 0
Reputation: 2054
well if you want to modify the object itself, you event don't need to declare a new object. use delete
const names = {
1: false,
2: true,
3: true,
5: false
}
for (let k in names){if(!names[k]){delete names[k]}}
console.log(names)
Upvotes: 1
Reputation: 20039
Try checking names[key]
is true
const names = {
1: false,
2: true,
3: true,
5: false
}
const newNames = Object.keys(names).reduce((object, key, val) => {
if (names[key]) {
object[key] = names[key];
}
return object;
}, {});
console.info('test', newNames);
Upvotes: 1