【问题标题】:How to delete a property from a JavaScript object based on the type of the property? [closed]如何根据属性的类型从 JavaScript 对象中删除属性? [关闭]
【发布时间】:2022-02-17 22:41:46
【问题描述】:

我想编写一个实用程序文件,该文件将传递一个具有“n”属性的 js 对象。此实用程序文件应从值为arraynested object 的对象中删除所有属性,然后将其返回。

理想情况下,它还可以创建一个新对象并包含来自传递对象的所有属性,而不是数组值和嵌套对象。

我尝试使用破坏,但没有找到任何基于类型删除属性的方法。

如何做到这一点?

【问题讨论】:

  • 你能传递与输入和预期输出相同的值吗\
  • 使用 typeof obj[key] === object , Array.isArray(obj[key]) 检查并删除
  • 集合和地图也是对象。你也想删除它们吗?

标签: javascript node.js


【解决方案1】:

如果我理解正确,这是我的尝试:

function cleanup (obj) {
    var obj2 = {};
    for (var i in obj) {
        if (!(obj[i] instanceof Array || typeof obj[i] == 'object')) {
            obj2[ i ] = obj[i];
        }
    }
    return obj2;
}

这会将所有不是数组或对象的属性添加到obj2 并返回它。

测试用例:

cleanup({
    one: {}, // object
    two: [], // array
    three: "string",
    four: 3029.32, // number
});

返回:

{ three: 'string', four: 3029.32 }

【讨论】:

    【解决方案2】:

    我有一个小实用函数,可用于按名称确定事物的类型。

    const obj = {
      one: {},
      two: [],
      three: 100,
      four: 'name',
      five: new Set(),
      six: new Map(),
      seven: function test() {},
      eight: null,
      nine: undefined
    };
    
    const toType = (x) => (
      ({}).toString.call(x).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
    );
    
    const disallowed = ['set', 'object', 'undefined', 'null'];
    
    for (const [key, value] of Object.entries(obj)) {
      const type = toType(value);
      if (disallowed.includes(type)) {
        console.log(`${type} - removed`);
        delete obj[key];
      }
    }
    
    console.log(obj);

    【讨论】:

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