Javascript 将所有现有值作为JSON返回

Javascript 将所有现有值作为JSON返回,javascript,json,angular,typescript,Javascript,Json,Angular,Typescript,以下代码将从我的表单中输出所有键和值: this.primaryFormGroup.valueChanges.subscribe(inputFields=>{ console.log(输入字段); } 它将输出所有的值,即使它们是空的,但这不是我想要的 Object.entries(inputFields).filter(([key, value]) => value) 这将只输出不是空的值。到目前为止,一切都很好 我的问题 输出总是一个数组,但我想要的是JSON 我用JSON.str

以下代码将从我的表单中输出所有键和值:

this.primaryFormGroup.valueChanges.subscribe(inputFields=>{
console.log(输入字段);
}
它将输出所有的值,即使它们是空的,但这不是我想要的

Object.entries(inputFields).filter(([key, value]) => value)
这将只输出不是空的值。到目前为止,一切都很好

我的问题

输出总是一个数组,但我想要的是JSON

我用
JSON.stringify(Object.entries(inputFields).filter(([key,value])=>value));
进行了尝试,结果如下:

[[“标题”,“你好”],[“描述”,“我是一个 文本“]、[“技术”、[“javaScript”、“CSS”]]

在我的例子中,key
tech
的值应该是一个数组,因为它已经被定义为array,但其他所有内容都应该是JSON

如何执行此操作?

//假设所有表单控件的初始值都未定义。
const formValues=this.primaryFormGroup.value;
const formValuesWithNoundefinedKeys=JSON.parse(JSON.stringify(formValues));
//FormValuesWithNonDefinedKeys将不包含任何具有未定义值的键
如果还需要删除空值,可以为JSON.stringify函数提供一个函数

下面的示例代码段:
constobj={a:undefined,b:1}
const objWithNoUndefinedValues=JSON.parse(JSON.stringify(obj))
//OBJWithNonualDefinedValues=>{b:1}

console.log(objWithNouneDefinedValues)
要过滤掉所有空值或空值,您可以尝试以下操作:

this.primaryFormGroup.valueChanges.subscribe(inputFields => {
  const clean = Object.keys(inputFields).filter(k => !!inputFields [k]).reduce((acc, curr) => {
          acc[curr] = inputFields[curr];
          return acc;
  }, {});
}
注:
此解决方案不适用于深度表单。

“我想要的是JSON”+“key
tech
应该是一个数组……但其他所有内容都应该是JSON”?@Andreas是的!这就是我想要的:
{“title”:“Hello”,“description”:“我是一个文本”,“tech”:[“JavaScript”,“CSS”]}
您能提供一个关于表单外观的示例吗?