首页 > 解决方案 > 通过对象验证属性?

问题描述

如何通过对象验证属性?我已经在checkProperty

我期望missingFields的回报Batch.Name不见了。

当前正在输出[ 'Batch.Id', 'Batch.Name' ],这是错误的。

let data = {
    Batch: {
        Id: 123,
    },
    Total: 100,
}

let checkProperty = ['Total', 'Batch.Id', 'Batch.Name'];

let missingFields = [];
checkProperty.forEach(field => {
    if (!data[field]) {
        missingFields.push(field);
    }
});

console.log(missingFields);

标签: javascriptnode.js

解决方案


您必须使用类似reduceafter split on 点来检查嵌套值是否存在:

let data = {
  Batch: {
    Id: 123,
  },
  Total: 100,
}

let checkProperty = ['Total', 'Batch.Id', 'Batch.Name'];

let missingFields = [];
checkProperty.forEach(field => {
  const val = field.split('.').reduce((a, prop) => !a ? null : a[prop], data);
  if (!val) {
    missingFields.push(field);
  }
});

console.log(missingFields);


推荐阅读