javascript - 删除对象中的空或未定义属性

标签 javascript arrays reduce destructuring

我想创建一个方法来删除 null 和未定义的属性。

这样做:

I convert my plain object into table

loop on it

filter on attributes if there are null or undefined

但问题是我并没有用新值来重构我的对象。让我们来看看:

var req = {
    adtForm1: {
      firstName: 'John',
      lastName: undefined,
      middleName: ''
    },
    adtForm2: {
      firstName: null,
      lastName: 'Doe',
      middleName: ''
    }
  };

  removeUndefinedFormsAttributes = (somesForms) => {
    const forms = Object.values(somesForms);
    const formsUpdate = {};
    forms.forEach(item => {
      const formFields = Object.values(item);
      formFieldsKeys = Object.keys(item);
      const formFiltered = formFields.filter(field => { return field !== null && field !== undefined; });
      console.log("formFiltered", formFiltered);
    })
    console.log(somesForms)
    return forms;
  };

removeUndefinedFormsAttributes(req)

正如我们在代码片段中看到的,formFiltered 更改了好的值,但我需要返回与 somesForms 相同的对象。 这就是我需要的:

expectedValue = {
    adtForm1: {
        firstName: 'John',
        middleName: ''
    },
    adtForm2: {
        lastName: 'Doe',
        middleName: ''
    }
}

我知道我需要使用 reduce() 函数和 keys() 函数,但我真的不知道如何使用。我将非常感谢任何帮助。

最佳答案

如果您只需要从嵌套在下一层的对象中删除具有 nullundefined 值的键,那么您可以使用 迭代主对象的值>Object.values,然后使用 Object.keys 遍历每个嵌套对象的键,并删除符合条件的键。您可以测试嵌套对象的值,以确定它们是 null 还是 undefined,例如 value == null(请参阅 How to determine if variable is undefined or null? ).

如果您需要删除对象中不同嵌套级别的键或某些嵌套值属于不同类型的对象中的键,请查看其他一些使用递归和类型检查的答案。

例如:

const req = { adtForm1: { firstName: 'John', lastName: undefined, middleName: '' }, adtForm2: { firstName: null, lastName: 'Doe', middleName: '' } };
Object.values(req).forEach((v) => {
  Object.keys(v).forEach((k) => {
    if (v[k] == null) {
      delete v[k];
    }
  });
});

console.log(req);
// {"adtForm1":{"firstName":"John","middleName":""},"adtForm2":{"lastName":"Doe","middleName":""}}

关于javascript - 删除对象中的空或未定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55520988/

相关文章:

javascript - AngularJS - 如何在 ng-repeat 和过滤器不返回任何行时显示计数 0

javascript - 从按钮到文本输入的 HTML 转换

python - 如何找到矩阵单元的邻居

arrays - 求数组中除0之外的最小值

java - (Hadoop) : reduce method is not getting executed/called while running mapreduce job

javascript - 将一组回调函数减少为一个回调

javascript - 如果 h2 包含这个词,jquery 将 <br> 添加到 h2

javascript - 何时将 JS 变量用引号引起来

arrays - 如何创建字典数组?

javascript - 如何根据属性键对值进行唯一和求和