在函数中删除不能在Javascript中工作

时间:2017-08-04 14:33:11

标签: javascript object

我的目标是删除对象中的属性,其值大于给定数字" num"使用功能。但是,"删除"不管用。什么会使删除在这种情况下不起作用,是否有更好的解决方案?



    function removeNumbersLargerThan(num, obj) {
      for(var key in obj){
        if(obj[key] > num){
          delete obj.key;
        }
      }
      return obj;
    }

    var obj = {
    a: 8,
    b: 2,
    c: 'montana'
    }
    removeNumbersLargerThan(5, obj);
    console.log(obj); // --> { b: 2, c: 'montana' }




4 个答案:

答案 0 :(得分:0)

你差不多完成了。如果条件obj键匹配那么一样。delete obj[key]

function removeNumbersLargerThan(num, obj) {
  for(var key in obj){
    if(obj[key] > num){
      delete obj[key];
    }
  }
  return obj;
}

var obj = {
a: 8,
b: 2,
c: 'montana'
}
removeNumbersLargerThan(5, obj)
console.log(obj); // --> { b: 2, c: 'montana' }

答案 1 :(得分:0)

您正在翻转您正在访问的属性。你第一次就做对了,但不是第二次:

function removeNumbersLargerThan(num, obj) {
  for(var key in obj){
    if(obj[key] > num){ // Correct!
      delete obj.key; // Should be obj[key] again
    }
  }
  return obj;
}

否则您将删除"键"属于obj

的财产

换句话说,您的循环不是delete您想要的属性delete。它只是delete对象上的key属性:

// What you declare
let num = 5;
let obj = {
    key: "hello",
    keyToKill: 7,
    keyToLeaveAlone: 3
}

// Your initial loop to remove keys with value greater than a number
for (let key in obj) {
    // If I find a key whose value is greater than num
    if (obj[key] > num) {
        // Delete the "key" property
        delete obj.key;
    }
}

// The above will give you this:
let incorrect = {
    keyToKill: 7,
    keyToLeaveAlone: 3
}

如果要删除值大于num的属性,请执行以下操作:

// If you do the following instead:
for (let key in obj) {
    // If I find a key whose value is greater than num
    if (obj[key] > num) {
        // Delete the property who's value is greater than num
        delete obj[key];
    }
}

// You'll get this
let correct = {
    key: "hello",
    keyToLeaveAlone: 3
}

答案 2 :(得分:0)

您需要使用括号表示法property accessor将变量用作值。

delete obj[key];
//        ^   ^



function removeNumbersLargerThan(num, obj) {
    for (var key in obj) {
        if (obj[key] > num) {
            delete obj[key];
        }
    }
    return obj;
}

var obj = { a: 8, b: 2, c: 'montana' };

removeNumbersLargerThan(5, obj);
console.log(obj); // { b: 2, c: 'montana' }




答案 3 :(得分:0)



    function removeNumbersLargerThan(num, obj) {
      for(var key in obj){
        if(obj[key] > num){
          delete obj.key;
        }
      }
      return obj;
    }

    var obj = {
    a: 8,
    b: 2,
    c: 'montana'
    }
    removeNumbersLargerThan(5, obj);
    console.log(obj); // --> { b: 2, c: 'montana' }






  function removeNumbersLargerThan(num, obj) {
      for(var key in obj){
        if(obj[key] > num){
          delete obj[key];
        }
      }
      return obj;
    }

    var obj = {
    a: 8,
    b: 2,
    c: 'montana'
    }
    removeNumbersLargerThan(5, obj);
    console.log(obj); // --> { b: 2, c: 'montana' }