0
点赞
收藏
分享

微信扫一扫

Object.keys() 判断每一行的值是否相等

八怪不姓丑 2022-04-13 阅读 103

需求规划
【下推收款单】:
1 审核通过的应收单才允许关联收款单,支持选择多行合并选单,生成收款单需要后台重复校验,记录选单次数和金额,后台记录可推收款单金额(剩余金额)=总金额-(对应核销明细的核销金额+已推收款单金额);

(选单规则:
1.过滤同一个销售公司,
2. 同一家客户;
3.判断选择明细行是否都满足剩余金额大于0,核销状态为未核销或者部分核销;
4.判断选择明细行单据状态是否为审核通过;
5.判断应收单是否同一币种;
6.判断应收单类型是否相同;)
如果不满足以上要求,给出错误提示,要求重新选择明细数据;

这些需求其实就是对查询页,进行数据按钮操作时的校验,只不过是真的比较多。以前写过,用的方法是很简单的那种for循环遍历,然后进行push()方法数组。今天在此优化一下。

 handlePushPayment = async (keys, rows) => {
    console.log(keys, rows); // 这种判断多项的一看就是支持多选的其概况,假设我们目前已经选中了第一条和第二条数据,其实就是对后台返回的data数据进行循环遍历比较每一项的值。

	// 判断是否选中,没有选中直接return掉。
    if (rows.length == 0) return;
    const firstRow = rows[0]; // 定义一个常量,接收选中的第一条数据作为基值。
    const checkFieldObj = { // 定义一个对象来接收要比较的那几条条件值进行对比。
      ouId: '销售公司',
      kehu: '客户',
      currCode: '币种',
      apTypeId: '应收单类型'
    };
    
    let errStr = ''; // 定义一个错误信息提示的变量,因为判断条件比较多,没不满足的时候都要进行提示。
    
    // Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和用for ... in 循环遍历该对象时返回的顺序一致。如果对象的键-值都不可枚举,那将返回由键组成的数组。
    // 也就是说 Object.keys()成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键名。 下边有例子
    
    let checkFields = Object.keys(checkFieldObj);
    for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {
      const row = rows[rowIndex];
      if (row.verifyState == 'weihexiao' || row.verifyState == 'bufenbexiao') {
        errStr = `选择行核销状态必须为【未核销或者部分核销】,请重新选择`;
        break;
      }
  if (row.orderState !== 'COMPLETE') {
    errStr = `选择行单据状态为必须为【审核通过】,请重新选择`;
    break;}
      if (rowIndex !== 0) {
        for (
          let checkFieldIndex = 0;
          checkFieldIndex < checkFields.length;
          checkFieldIndex++
        ) {
          const key = checkFields[checkFieldIndex];
          const name = checkFieldObj[key];
          if (row[key] !== firstRow[key]) {
            errStr = `选择行项的${name}必须一致,请重新选择`;
            break;
          }
        }
        if (errStr) {
          break;
        }
      }
    }
    if (errStr) {
      ElNotification({
        type: 'error',
        message: errStr
      });
    } else {
      this.setState({
        createPayModalVisible: true, // 下推弹框显示
        createPayModalParams: {
          ids: keys
        }
      });
    }
  };

例子

1 传入对象,返回属性名

var data={a:1,b:2,c:9,d:4,e:5};
    console.log(Object.keys(data));//["a", "b", "c", "d", "e"]
    Object.keys(data).map((key,item)=>{
        console.log(key,data[key]);//key=>属性名    data[key]=>属性值
});

在这里插入图片描述
2 传入字符串,返回索引

var str = 'ab1234';
console.log(Object.keys(str ));  //[0,1,2,3,4,5] 

在这里插入图片描述
3 传入数组 返回索引
var arr = [“a”, “b”, “c”];
console.log(Object.keys(arr)); // console: [“0”, “1”, “2”]
在这里插入图片描述
4 构造函数 返回空数组或者属性名

function Pasta(name, age, gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
      this.toString = function () {
            return (this.name + ", " + this.age + ", " + this.gender);
    }
}

console.log(Object.keys(Pasta)); //console: []

var spaghetti = new Pasta("Tom", 20, "male");
console.log(Object.keys(spaghetti)); //console: ["name", "age", "gender", "toString"]

在这里插入图片描述

扩展

Object.values() ; Object.entries()

Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值。

Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值对数组。

举报

相关推荐

0 条评论