【问题标题】:Remove number properties from an object?从对象中删除数字属性?
【发布时间】:2018-05-10 00:23:57
【问题描述】:

我正在尝试从对象中删除数字属性:

function removeNumberValues(obj) {
  for (i in obj) {
    if (obj['i'] instanceof Number) {
      delete obj['i'];
    }
  }
  return obj;
}

但它不会删除数字属性。哈普?我错过了什么?

【问题讨论】:

  • 你能提供一个json吗?

标签: javascript object


【解决方案1】:

您需要使用变量i,而不是值'i',您可以检查typeof operatornumber 作为值。

function removeNumberValues(object) {
    var key;
    for (key in object) {
        if (typeof object[key] === 'number') {
            delete object[key];
        }
    }
    return object;
}

console.log(removeNumberValues({ a: 'foo', b: 42 }));

使用Object.keysArray#forEach 来迭代键。

function removeNumberValues(object) {
    Object.keys(object).forEach(function (key) {
        if (typeof object[key] === 'number') {
            delete object[key];
        }
    });
    return object;
}

console.log(removeNumberValues({ a: 'foo', b: 42 }));

【讨论】:

  • 完美,谢谢!为什么我不能使用迭代器?我可以将它用于类似的功能,如果它是偶数,它会删除一个属性。
  • 如果您还想删除也可能具有数字字符串值的属性,例如var obj = {prop1 : "12"},我建议使用 isNaN() 而不是 typeof。
  • @Advokaten01,循环正在遍历对象键。什么意思?
  • @Advokaten01,迭代器是什么意思?
  • @NinaScholz 我的意思是,而不是仅仅这样做:for (i in obj)。也就是为什么要事先定义一个变量?
【解决方案2】:

请改用typeof。在这种情况下更可靠。除非该值来自 Number 构造函数,否则它不会起作用。

const obj = {
  str: "string",
  num: 1,
  str2: "string2",
  num2: 2
};

console.log(removeNumberValues(obj));

function removeNumberValues(obj) {
  Object.keys(obj).forEach(function(key) {
    if (typeof obj[key] === 'number') {
      delete obj[key];
    }
  });

  return obj;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2021-06-12
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多