开发者问题收集

TypeError-无法将未定义或空转换为对象。尝试将状态对象值转换为 JSON 数组字符串

2021-03-26
1262

尝试将输入表单数据放入 JSON 数组字符串时,出现错误

Cannot convert undefined or null to object.

下面是我尝试在状态数据上使用的代码:

const test = this.state.values;
Object.keys(test).forEach(key=>test[key]=[test[key]]);

当我执行 console.log(test) 时,数据如下:

Object
input1: {i: "ytuy"}
input2: {x: "tyutyu"}

我的最终目标是使 JSON 输出如下:

{
   "input1":[{"i":"ytuy"}],
   "input2":[{"x":"tyutyu"}]
}

有人能解释我为什么会收到此错误吗?

2个回答

看起来您正在尝试将每个属性值放入单条目数组中。您可以通过使用 Object.fromEntries Object.entries 映射对象来实现此目的。

正如评论中提到的,至关重要的是不要改变当前对象,因为这将改变组件的状态。

const test = {
  input1: {i: "ytuy"},
  input2: {x: "tyutyu"}
 }

const mapped = Object.fromEntries(
  Object.entries(test).map(
    ([key, value]) => [key, [value]]
  )
);

console.log(JSON.stringify(mapped));

将打印出

{"input1":[{"i":"ytuy"}],"input2":[{"x":"tyutyu"}]}

您收到的特定错误听起来可能 this.state.values 有时 nullundefined ,并且它并不总是 object 。因此,在尝试映射对象之前,您需要确保该对象存在。

Linda Paiste
2021-03-26

由于 React js 中不允许改变状态对象,因此这里是我的问题的解决方案。

let obj = Object.assign({}, test );  // creates a brand new object
Object.keys(obj).forEach(key=>obj[key]=[obj[key]]);
user3274140
2021-03-30