我从 API 接收此对象:
{
"id": 10,
"lectura": "zx71 ",
"articulo": "ZX71 ",
"ubicacion": "ddd ",
"uds": 5,
"usuario": null,
"createD_AT": "2019-12-04T08:19:56.12"
}
我想 trim 这些值,所以我有这个功能:
const trimValues = object => {
console.log(JSON.stringify(object, null, 2))
const trimmedProperties = Object.entries(object).reduce(
(acc, [key, value]) => {
if (typeof value == "string") {
return (acc[key] = value.trim());
}
},
{}
);
return { ...object, trimmedProperties };
};
问题是我收到此错误消息:
core.js:9110 ERROR TypeError: Cannot set property 'lectura' of undefined
此行返回错误:return (acc[key] = value.trim());
我错过了什么?
最佳答案
有 3 个主要错误,第一个错误是,如果 value 不是字符串,则您没有返回任何内容,这意味着reduce 的下一次迭代将收到 acc===undefined
,第二个是由于赋值调用的返回将仅返回键的值而不是整个对象,最后您还必须解构 trim 器属性,您可以通过执行以下操作来修复它
const trimValues = object => {
console.log(JSON.stringify(object, null, 2))
const trimmedProperties = Object.entries(object).reduce(
(acc, [key, value]) => {
if (typeof value == "string") {
acc[key] = value.trim();
}
return acc
},
{}
);
return { ...object, ...trimmedProperties };
};
但是,确实没有理由只在迭代后将未 trim 的属性(不是字符串)与 trim 的属性组合起来,而是为了简化它并删除不必要的迭代,您可以执行以下操作:
const trimValues = object => {
console.log(JSON.stringify(object, null, 2))
return Object.entries(object).reduce((acc, [key, value]) => {
acc[key] = (typeof value === "string") ? value.trim() : value;
return acc
}, {});
};
关于javascript - trim 对象中的所有值;错误: Cannot set property of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59176085/