onChange 检查对象的所有属性是不是存在且不是未定义或空字符串

Posted

技术标签:

【中文标题】onChange 检查对象的所有属性是不是存在且不是未定义或空字符串【英文标题】:onChange to check all property of object exist and is not undefined or empty stringonChange 检查对象的所有属性是否存在且不是未定义或空字符串 【发布时间】:2017-09-19 03:29:42 【问题描述】:

这是一种非常常见的用法,您必须检查是否所有字段都已填写。我使用 react onChange 并应用 e.target.name 作为我的对象的键。

像我一样console.log(this.state.user);我会得到

user : 
    name:"something",
    age:1

但是如何检查所有内容是否为空或不为空?我像user.name != undefined 一样手动检查,但我的密钥超过 10。有没有更好的 lodash 方法来做到这一点?

我这样设置状态

const user = this.state.user;
user[field] = event.target.value;

this.setState(
    user
);

【问题讨论】:

【参考方案1】:

您可以迭代对象的值并使用reduce 方法。

const allExist = Object.values(this.state.user)
  .reduce(function(accumulator, current)
   return accumulator && !!current
  , true);

const user = 
  name:"something",
  age:1


const allExist = Object.keys(user)
  .reduce(function(accumulator, current)
   return accumulator && !!current
  , true);
  
console.log(allExist);

【讨论】:

是真的,reduce的第二个参数需要吗? 这是初始值。如果未提供初始值,则将使用数组中的第一个元素。我使用它是因为它确保我总是得到一个布尔值作为输出,即使对象中有一个属性。 您得到错误或错误结果?我可以看看你的完整 user 对象吗?【参考方案2】:

您可以使用Object.keys 方法 - 循环生成的数组并检查每个键是否具有有效值:

const user = 
  name: "Tom",
  age: 28,
  address: null,
  occupation: "Programmer",
  interest: "javascript",
  dob: undefined


const keys = Object.keys(user);
for (let i = 0; i < keys.length; i++) 
  if (user[keys[i]] == null) 
    console.log(`$keys[i] needs a value`);
  

【讨论】:

以上是关于onChange 检查对象的所有属性是不是存在且不是未定义或空字符串的主要内容,如果未能解决你的问题,请参考以下文章

JS检查深层对象属性是不是存在[重复]

检查属性中是不是存在对象[重复]

如何快速检查对象数组中是不是存在属性值

PHP检查对象或类中是不是存在属性

在 Razor 中,如何根据元素的属性检查 ViewBag IEnumerable 对象中是不是存在对象?

检查 JavaScript 中是不是存在深度嵌套对象属性的最简单方法是啥? [复制]