我有以下代码,我想填写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);
间隙功能的重点。
答案 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;
旁注: 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会提供一些帮助的功能,例如useWith
和converge
(通常可以替换lift
。)需要useWith
:
const matchId = R.useWith(findIndex, [R.propEq('id'), R.identity]);
matchId('third-id', data); //=> 3
但我发现第一个版本更具可读性。您可以在 Ramda REPL 上找到它们。
请注意side note from Emissary。 R.__
占位符主要用于显示您提供的参数之间的差距;作为最后的论据,它没有做任何事情。