Javascript 获取array.filter回调函数中的索引
我有以下带有回调函数的数组过滤器:Javascript 获取array.filter回调函数中的索引,javascript,arrays,Javascript,Arrays,我有以下带有回调函数的数组过滤器: array.filter(createPredicateFn(expression, comparator)); function createPredicateFn(expression, comparator) { var predicateFn; if (comparator === true) { comparator = angular.equals;
array.filter(createPredicateFn(expression, comparator));
function createPredicateFn(expression, comparator) {
var predicateFn;
if (comparator === true) {
comparator = angular.equals;
} else if (!angular.isFunction(comparator)) {
comparator = function (actual, expected) {
if (angular.isObject(actual) || angular.isObject(expected)) {
// Prevent an object to be considered equal to a string like `'[object'`
return false;
}
actual = angular.lowercase('' + actual);
expected = angular.lowercase('' + expected);
return actual.indexOf(expected) !== -1;
};
}
predicateFn = function (item) {
return deepCompare(item, expression, comparator);
};
}
我的回调函数声明如下:
function createPredicateFn(expression, comparator) {
如何获取createPredicateFn中元素的索引
编辑:
这是我的谓词函数:
array.filter(createPredicateFn(expression, comparator));
function createPredicateFn(expression, comparator) {
var predicateFn;
if (comparator === true) {
comparator = angular.equals;
} else if (!angular.isFunction(comparator)) {
comparator = function (actual, expected) {
if (angular.isObject(actual) || angular.isObject(expected)) {
// Prevent an object to be considered equal to a string like `'[object'`
return false;
}
actual = angular.lowercase('' + actual);
expected = angular.lowercase('' + expected);
return actual.indexOf(expected) !== -1;
};
}
predicateFn = function (item) {
return deepCompare(item, expression, comparator);
};
}
在
createPredicateFn()
中,必须返回另一个函数。此内部函数最多可以有三个参数:
function createPredicateFn(expression, comparator) {
return function( val, index, arr ) {
// do something and return a boolean here
return index % 2 == 0;
}
}
如果没有
createPredicateFn
的代码,我们将无法帮助您。我尝试了这个方法并获得了索引,但是,我无法使我的函数工作(请参见我的编辑)。给定的函数从未返回函数,但什么都没有返回(因此未定义的
)。当您想使用生成器函数时,该生成器必须返回一个函数引用,因此filter()
知道要使用哪个函数。我有点迷路了……请您通过访问索引重写我的函数好吗?我是从angularjs filter得到这个函数的,我对它不是很满意,这就是为什么我不能100%确定我在做什么。@n当实际的函数决定一个条目应该留在数组中还是被过滤时,是predicateFn()
,对吗?如果是这样的话,只需在函数末尾返回它。明白了,我今天晚些时候会尝试!谢谢