0

使用 Ramdajs 的“where”函数(参见:“where” - ramda docs),我想创建一个测试对象来比较它们之间的属性值。

例子:

        let pred = R.where({
            a: predTestA(...),
            b: predTestB(...),
            c: predTestC(...)
        });

因此,我想编写一个比较 a、b 和 c 值的测试方法。

例子:

// Test if the value of "a" is higher or equal than all other values

let predTestA = (...) => {
  if ((valA >= ValB) || (valA >= ValC)) {
    return true
  } else {
    return false
  }
} 

问题:

  1. 如何访问属性的值?
  2. 您是否看到了一种更好的方法来完成对象值的比较?

谢谢你的帮助!

莫夫

4

1 回答 1

2

Ramda 不提供。我相信它曾经做过,但很少使用。但是,编写自己的版本会很容易where做到这一点:

const myWhere = curry(function (spec, testObj) {
  for (var prop in spec) {
    if (R.has(prop, spec) && !spec[prop](testObj[prop], testObj)) {
//                                                      ^^^^^^^
      return false;
    }
  }
  return true;
});

突出显示的位是与 Ramda 版本的唯一真正区别。

// Remember the triangle inequality from geometry class?
const triangular = myWhere({
  a: (a, t) => a < t.b + t.c,
  b: (b, t) => b < t.a + t.c,
  c: (c, t) => c < t.a + t.b
});

triangular({a: 3, b: 4, c: 9}); //=> false
triangular({a: 3, b: 6, c: 8}); //=> true
triangular({a: 7, b: 1, c: 5}); //=> false
triangular({a: 2, b: 8, c: 4}); //=> false
triangular({a: 3, b: 4, c: 5}); //=> true

如果您认为这足够重要并且应该回到 Ramda 本身,请随时提出问题

于 2016-03-16T12:04:39.227 回答