JavaScript如果条件语句未筛选输入值

时间:2018-08-11 20:25:08

标签: javascript if-statement

我正在解决BootCamp之前的问题。我正在获取一个对象并删除所有具有奇数值的属性,然后返回该对象。为什么不过滤掉奇数值?

/*
Write a function called "removeOddValues".

Given an object, "removeOddValues" removes any properties whose valuse are odd numbers.

var obj = {
  a: 2,
  b: 3,
  c: 4
};
removeOddValues(obj);
console.log(obj); // --> { a: 2, c: 4 }
*/

function removeOddValues(obj) {
  for (var values in obj) {
      if (obj[values] === 'Number' && obj[values] % 2 !== 0) {
           delete obj[values]
      }  
      }   
      return obj;
};


var obj = {
  a: 2,
  b: 3,
  c: 4
};


removeOddValues(obj);

output:
{a: 2, b: 3, c: 4}

2 个答案:

答案 0 :(得分:3)

由于您所构造的If语句对于您所拥有的条件而言不会评估为true,因此不会删除它们。

我认为您在第一种情况下缺少typeof。您的if语句应如下所示:

if ((typeof obj[values]) === 'number' && obj[values] % 2 !== 0) ...

修复该问题后,您的代码可以正常运行:

function removeOddValues(obj) {
  for (var values in obj) {
    if ((typeof obj[values]) === 'number' && obj[values] % 2 !== 0) {
      delete obj[values]
    }
  }
  return obj;
};


var obj = {
  a: 2,
  b: 3,
  c: 4
};


console.log(removeOddValues(obj))

答案 1 :(得分:0)

只需使用此:

function removeOddValues(obj) {
  for (var values in obj) {
      if (typeof obj[values] === 'number' && obj[values] % 2 !== 0) 
           delete obj[values]           
  }   
  return obj;
};