Javascript 如何检查不可变映射的所有键是否都有值

Javascript 如何检查不可变映射的所有键是否都有值,javascript,reactjs,functional-programming,immutable.js,Javascript,Reactjs,Functional Programming,Immutable.js,如何验证所有键是否都有值? p、 s:我有以下要求 imageName和密码应至少包含一个字符 标记应至少包含一项 您可以使用javascript库使用预定义的模式更新值。或者,您可以编写一个函数,返回不符合要求的对象的键 自定义JS方法 const [fieldValues, updateFieldValues] = useState(fromJS({ imageName: '', tags: [], password: '', })); const handle

如何验证所有键是否都有值? p、 s:我有以下要求

  • imageName和密码应至少包含一个字符
  • 标记应至少包含一项
  • 您可以使用javascript库使用预定义的模式更新值。或者,您可以编写一个函数,返回不符合要求的对象的键

    自定义JS方法

    const [fieldValues, updateFieldValues] = useState(fromJS({
        imageName: '',
        tags: [],
        password: '',
      }));
    
    const handleButtonClick = () => { 
      const res = // logic to find which field/fields are empty
    }
    
    
      function validateObj(obj) {
    let isValid = true;
    const errorKeys = [];
    Object.entries(obj).forEach(([key, value]) =>{
      if(!value) {
        errorKeys.push(key)
        isValid = false;
        return;
      }
      if(Array.isArray(value)) {
        if(!value?.length) {
          errorKeys.push(key)
        isValid = false;
        return;
        }
      }
    
    })
    return { isValid, errorKeys }
    }
    
    不可变JS方法

    const [fieldValues, updateFieldValues] = useState(fromJS({
        imageName: '',
        tags: [],
        password: '',
      }));
    
    const handleButtonClick = () => { 
      const res = // logic to find which field/fields are empty
    }
    
    
      function validateObj(obj) {
    let isValid = true;
    const errorKeys = [];
    Object.entries(obj).forEach(([key, value]) =>{
      if(!value) {
        errorKeys.push(key)
        isValid = false;
        return;
      }
      if(Array.isArray(value)) {
        if(!value?.length) {
          errorKeys.push(key)
        isValid = false;
        return;
        }
      }
    
    })
    return { isValid, errorKeys }
    }
    
    用法:

     function validateObj(obj) {
        let isValid = true;
        const errorKeys = [];
        console.log(obj)
        obj.mapEntries(([key, value]) =>{
        console.log(key, value)
          if(!value) {
            errorKeys.push(key)
            isValid = false;
            return;
          }
          if(List.isList(value)) {
            if(!value.size) {
              errorKeys.push(key)
            isValid = false;
            return;
            }
          }
    
        })
        return { isValid, errorKeys }
        }
    
    如有任何问题/疑问,请随时联系


    编辑:

    不可变的.js集合,因此您可以使用
    来。。。的
    和其他常见交互。它还提供了许多查看数据的方法,如
    forEach、find、findKey、findValue、filter
    。看看这些,它们很好。下面可以看到几个例子:

    const thing=Immutable.fromJS({
    香蕉:“鳞片”,
    图像名称:“”,
    标签:[],
    密码:“”,
    });
    对于事物的([键,值]){
    log('for of',key',:',val);
    }
    thing.forEach((key,val)=>{
    log('forEach',key',:',val);
    });
    const firstItemIdoNotLike=thing.findKey((key,val)=>{
    如果(!!val){
    返回true;
    }
    if(val.hasOwnProperty('length')){
    返回值长度<1;
    }
    返回false;
    });
    if(firstItemIdoNotLike){
    log('validation error on',firstItemIdoNotLike);
    }

    @Sumanth Madishetty你好。我非常感谢您的宝贵反馈,但实际上我正在React.js项目中使用一个名为immutable.js的库@Noobbokhon要使用不可变JS更新答案,您可以对字符串和数组使用
    length
    属性<代码>[]长度==0和
    “”。长度==0
    。至少包含一个字符或元素的字符串或数组的
    长度将大于零