首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在序列化对象时省略javascript或typescript中的`unfined`列

问如何在序列化对象时省略javascript或typescript中的`unfined`列
EN

Stack Overflow用户
提问于 2020-09-09 11:15:58
回答 3查看 158关注 0票数 0

我有这样的对象:

代码语言:javascript
复制
Person {
  id: '75c37eb9-1d88-4d0c-a927-1f9e3d909aef',
  user: undefined,
  title: 'Mr.',
  first_name: 'somebody',
  last_name: 'body',
  belong_organization: undefined,
  expertise: [],
  contact: undefined
}

当我进行序列化时,我使用loadsh省略函数,如下所示:

代码语言:javascript
复制
toJSON() {
    return _.omit(this, ['contact']);
}

我想要做的是省略未定义的属性,因为错误:

代码语言:javascript
复制
 `undefined` cannot be serialized as JSON.

这个栏目是动态的,不能像我一样预测某个栏目。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-09 11:28:37

在这方面,最好使用pickBy和omitBy,而不是省略:

​

代码语言:javascript
复制
var person = {
  id: '75c37eb9-1d88-4d0c-a927-1f9e3d909aef',
  user: undefined,
  title: 'Mr.',
  first_name: 'somebody',
  last_name: 'body',
  belong_organization: undefined,
  expertise: [],
  contact: undefined
};

const newPerson= _.pickBy(person, v => v !== undefined);

console.log(newPerson);
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

​

票数 0
EN

Stack Overflow用户

发布于 2020-09-09 11:22:28

JSON.stringify将在没有任何特殊逻辑的情况下省略未定义的属性。

​

代码语言:javascript
复制
console.log(JSON.stringify({
  id: '75c37eb9-1d88-4d0c-a927-1f9e3d909aef',
  user: undefined,
  title: 'Mr.',
  first_name: 'somebody',
  last_name: 'body',
  belong_organization: undefined,
  expertise: [],
  contact: undefined
}, null, 3));

​

票数 0
EN

Stack Overflow用户

发布于 2020-09-09 11:58:46

在定义类时,这可能是问题所在。我复制了它,它仍然可以工作。下面的代码片段可以帮助你

​

代码语言:javascript
复制
class Person {
  constructor(props) {
    Object.assign(this, props)
  }

  toJSON() {
    return _.omit(this, ["contact"])
  }
}

const person = new Person({
  id: "75c37eb9-1d88-4d0c-a927-1f9e3d909aef",
  user: undefined,
  title: "Mr.",
  first_name: "somebody",
  last_name: "body",
  belong_organization: undefined,
  expertise: [],
  contact: undefined,
})

console.log(person.toJSON())
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63804261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档