确定Javascript对象中的不完整部分

pkln4tw6  于 2023-02-28  发布在  Java
关注(0)|答案(2)|浏览(198)

我有一个JavaScript对象,它有几个属性:

{
  banking: {
    account_number: null,
    account_type: null,
    bank_name: null,
    debit_day: null
  },
  fitment: {
    date: null,
    terms: null
  },
  personal_info: {
    email: null,
    IDNumber: null,
    mobile: null,
    name: null,
    residential_address: null,
    surname: null,
    title: null,
    work_address: null,
    work_tel: null
  },
  vehicle: {
    brand: null,
    colour: null,
    model: null,
    registration: null,
    vin: null,
    year: null
  }
}

所有顶级属性和嵌套属性的默认值均为null
我正试图找出一种方法,将属性分为三组,即:

    • 空**、部分完整

""是将段内的所有值设置为null的情况。
"partial"表示已设置部分中的某些值(并非所有null
"complete"表示一个部分中没有值被设置为null。所有部分都有值。
我的第一次尝试是在_.some()中使用Underscore库,但是我似乎无法满足所有的组场景。
如能给予帮助和指导,不胜感激。
谢谢!

k7fdbhmy

k7fdbhmy1#

您可以先检查every,然后检查some,或者默认为empty

const main = () => {
  const sectionStatus = Object.fromEntries(
    Object.entries(sections).map(([section, data]) => [
      section,
      Object.entries(data).every(([id, value]) => value !== null)
        ? 'complete'
        : Object.entries(data).some(([id, value]) => value !== null)
          ? 'partial'
          : 'empty'
    ]));
  
  console.log(sectionStatus);
};

const sections = {
  banking: {
    account_number: '555',
    account_type: null,
    bank_name: null,
    debit_day: null
  },
  fitment: {
    date: new Date(),
    terms: 'foobar'
  },
  personal_info: {
    email: null,
    IDNumber: null,
    mobile: null,
    name: null,
    residential_address: null,
    surname: null,
    title: null,
    work_address: null,
    work_tel: null
  },
  vehicle: {
    brand: null,
    colour: null,
    model: null,
    registration: null,
    vin: null,
    year: null
  }
};

main();
.as-console-wrapper { top: 0; max-height: 100% !important; }

输出

{
  "banking": "partial",
  "fitment": "complete",
  "personal_info": "empty",
  "vehicle": "empty"
}

如果你想优化这个,你可以用1(不是null)或0null)标记每个字段,并减少值。
一个三个三个一个

ajsxfq5m

ajsxfq5m2#

您还可以使用_.groupBy进一步分解这个问题。首先,使用一个函数来确定单个部分的类别:

function category(section) {
    return _.every(section, _.isNull) ? 'empty' :
           _.some(section, _.isNull) ? 'partial' : 'complete';
}

然后,将其与_.groupBy组合,为每个类别创建原始对象的数组:

_.groupBy(sections, category)

把所有这些放在一起:
一个二个一个一个

相关问题