【问题标题】:undefined properties not being added to object未定义的属性未添加到对象
【发布时间】:2022-11-19 02:28:15
【问题描述】:

我有以下代码:

let object = {};
Object.keys(this.graphQL.body).forEach((key) => {
    console.log(key, this[key])
    object[key] = this[key]
})
let json = JSON.stringify(object);
console.log('API json', json)

这给出了这个控制台日志:

id undefined
title undefined
filename mitchel-lensink-Y2OCQVuz6XM-unsplash.jpg
description undefined
keywords undefined
assetID undefined
height undefined
width undefined
uploadOwnerType image
uploadOwnerID 100513
createdAt undefined
updatedAt undefined
API json {"filename":"mitchel-lensink-Y2OCQVuz6XM-unsplash.jpg","uploadOwnerType":"image","uploadOwnerID":100513}

为什么我没有添加未定义的键?我怎样才能添加它们?

【问题讨论】:

  • undefined 不是 JSON 中的值,因此 JSON.stringify() 会跳过它们。如果需要,您可以将它们替换为null

标签: javascript


【解决方案1】:

JSON.stringify 方法默认删除未定义的键。

let json = JSON.stringify(object);

为了保留这些,我们可以使用替换器 -

let object = {};
Object.keys(this.graphQL.body).forEach((key) => {
    console.log(key, this[key])
    object[key] = this[key]
})

const replacer = (key, value) =>
  typeof value === 'undefined' ? null : value;

let json = JSON.stringify(object, replacer);
console.log('API json', json)

如果需要任何进一步的说明,请在 cmets 中告诉我。

【讨论】:

  • 啊谢谢!我不怀疑 JSON stringify 是删除它的那个。这是有道理的,谢谢。
【解决方案2】:

这是对象吗(this.graphQL.body)?

所以,

做这个 object[key] = this.graphQL.body[key]

【讨论】:

    【解决方案3】:

    添加了未定义的键,但 JSON.stringify 忽略了所有具有未定义值的字段。 要添加未定义的值键,您可以使用替换函数:

    const replacer = (key, value) =>
      typeof value === 'undefined' ? null : value;
    

    然后将其作为第二个参数发送给 JSON.stringify 函数

    let json = JSON.stringify(object, replacer);
    

    查看此博客文章以获取更多信息:https://muffinman.io/blog/json-stringify-removes-undefined/

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多