limit
limit

Reputation: 647

Javascript Object Remove Key based on Value Keep Object

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

Answers (4)

Pushpendra Kumar
Pushpendra Kumar

Reputation: 1684

Object.keys(names).map(val => {  if(names[val] == false) { delete names[val] } });

Upvotes: 0

chakwok
chakwok

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

Hank X
Hank X

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

User863
User863

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

Related Questions