ramda findIndex有差距

时间:2017-06-05 10:26:43

标签: ramda.js

我有以下代码,我想填写var baseServices = { http: $http, scope: $scope, timeout: $timeout, interval: $interval, }; angular.module('myModule',[]) .controller('MyController', ['baseServices', MyController]) .controller('MyController2', ['baseServices', MyController2]) .controller('MyController3', ['baseServices', MyController3]) var MyController = function(baseServices){ baseServices.$timeout(...); } ,所以我想写这样的东西:

id

所以我可以像const data = [ { id: 'some-id' }, { id: 'some-other-id' }, { id: 'third-id' }, ]; const tabIndex = R.findIndex(R.propEq('id', R.__))(data); 一样使用它,但这不是一个函数。 我有什么想念或混淆?

以下作品

tabIndex('third-id')

但我想,这就是const tabIndex = (id) => R.findIndex(R.propEq('id', id))(data); 间隙功能的重点。

2 个答案:

答案 0 :(得分:3)

我仍然试图自己掌握这种黑暗艺术,但我认为问题是R.findIndex期望谓词(函数/断言)作为参数,并且不区分谓词和常规curried函数作为输入。

要解决这个问题,可以编写一个新函数(从右到左评估):



const data = [
    { id: 'some-id' },
    { id: 'some-other-id' },
    { id: 'third-id' }
];

const tabIndex = R.compose(R.findIndex(R.__, data), R.propEq('id'));

console.log(tabIndex('third-id')); // 2

<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
&#13;
&#13;
&#13;

旁注: R.__占位符会自动推断缺失最右边的参数 - 例如R.propEq('id')R.propEq('id', R.__)相同。

答案 1 :(得分:3)

我认为到目前为止最简单的方法是

const matchId = (id, data) => R.findIndex(R.propEq('id', id), data);
matchId('third-id', data); //=> 2

如果你真的想让这一点免费,Ramda会提供一些帮助的功能,例如useWithconverge(通常可以替换lift。)需要useWith

const matchId = R.useWith(findIndex, [R.propEq('id'), R.identity]);
matchId('third-id', data); //=> 3

但我发现第一个版本更具可读性。您可以在 Ramda REPL 上找到它们。

请注意side note from EmissaryR.__占位符主要用于显示您提供的参数之间的差距;作为最后的论据,它没有做任何事情。