【问题标题】:What is the better way to check in array of nested object检查嵌套对象数组的更好方法是什么
【发布时间】:2021-12-29 06:23:48
【问题描述】:

我想检查至少一个选中的字段是否为真且未被禁用:

const test = 
  [ { Title: 
      { Article: { checked: true,  disabled: true  } 
      , Desc:    { checked: false, disabled: false } 
    } } 
  , { News: 
      { Dashboard: { checked: false, disabled: false} 
    } }
  ] 

我试过这样:

const checkedItems = () => {
  let value = false;
  test.forEach(el => Object.entries(el).forEach(([title, checkboxProps]) => {
    Object.entries(checkboxProps).forEach(([name, config]) => {
      if (config["checked"] && !config["disabled"]) {
        value = true
      }
    })
  }))
  return value;
};

【问题讨论】:

    标签: javascript object nested


    【解决方案1】:

    几个flatMaps 和Object.values 可以做得相当干净。

    const test = [{
      Title: {
        Article: {
          checked: true,
          disabled: true
        },
        Desc: {
          checked: false,
          disabled: false
        }
      }
    }, {
      News: {
        Dashboard: {
          checked: false,
          disabled: false
        }
      }
    }];
    
    const atLeastOneCheckedAndNotDisabled = test
      .flatMap(Object.values)
      .flatMap(Object.values) // now we have an array of [{checked, disabled}]
      .some(innerObj => innerObj.checked && !innerObj.disabled);
      
    console.log(atLeastOneCheckedAndNotDisabled);

    你不关心键,只关心值,所以Object.valuesObject.entries 更容易使用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多