als*_*o77 20 javascript angularjs
所以我的角度控制器中有一个对象数组,我想返回数组中字段索引的值,该数组与我的参数具有匹配的ID.数组中只有一个对象具有匹配的fieldId ..
$scope.indexOfField = function(fieldId) {
return $scope.model.fieldData.filter(function(x) {
if (x.Id === fieldId) {
return // ???????
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 46
该.findIndex()方法返回满足函数给定条件的数组第一个元素的索引。如果函数false对数组的所有元素都返回,则结果为-1。
在我的示例中,x是每次迭代的一个项目,我对我的条件使用交叉函数。
const datas = [];
const fieldId = 5;
let index = datas.findIndex( x => x.Id === fieldId );
Run Code Online (Sandbox Code Playgroud)
Rub*_*oga 16
您无法从filter方法返回索引.
The filter() method creates a new array with all elements that pass the test implemented by the provided function.
您可以使用 forEach
filter()方法创建一个新数组,其中包含所有传递由提供的函数实现的测试的元素.
$scope.indexOfField = function(fieldId) {
var i;
return $scope.model.fieldData.forEach(function(x, index) {
if (x.Id === fieldId) {
i = index;
}
});
// use i
}
Run Code Online (Sandbox Code Playgroud)
甚至更好地使用,for因为当你找到你的身份证时,你无法停止.
$scope.indexOfField = function(fieldId) {
var fieldData = $scope.model.fieldData,
i = 0, ii = $scope.model.fieldData.length;
for(i; i < ii; i++) if(fieldData[i].Id === fieldId) break;
// use i
}
Run Code Online (Sandbox Code Playgroud)
Jiv*_*ngs 14
使用三个参数调用回调:
- 元素的价值
- 元素的索引
- 正在遍历的Array对象
但是,some如果数组中只有一个实例(因为它会在找到第一个匹配项时立即停止),您可能应该使用该函数,然后使用indexOf以下命令查找索引:
var field = $scope.model.fieldData.filter(function(x) {
return x.Id === fieldId;
})[0];
var index = $scope.model.fieldData.indexOf(field);
Run Code Online (Sandbox Code Playgroud)
或者迭代数组,直到找到正确的元素:
var index;
$scope.model.fieldData.some(function(x, i) {
if (x.Id === fieldId) return (index = i);
});
Run Code Online (Sandbox Code Playgroud)
回调的第二个参数是索引。我不太清楚你想要你的函数做什么/返回什么,但如果你添加, indexafter function(x,这将使你能够访问该迭代的索引。
从你的函数名称来看,我认为你filter根本不想要:
$scope.indexOfField = function(fieldId) {
var result = -1;
$scope.model.fieldData.some(function(x, index) {
if (x.Id === fieldId) {
result = index;
return true;
}
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
Array#some从返回真值的第一次迭代开始停止,因此我们将在第一次找到匹配项时停止搜索。
小智 6
数组(查找多个索引)方法
[10, 7, 13, 15, 230].map((e,i) => e > 13 ? i : undefined).filter(x => x)
//returns [3, 4](*** RETURNS multiple indexes ***)
//FILTER (is simply just REMOVING the UNDEFINED elements (which are FALSY and considered the same as FALSE)
Run Code Online (Sandbox Code Playgroud)
否则你会得到...
[10, 7, 13, 15, 230].map((e,i) => e > 13 ? i : undefined) //returns [undefined, undefined, undefined, 3, 4]
Run Code Online (Sandbox Code Playgroud)
返回多个索引(代替findIndex方法)
[1, 1, 2, 2, 2, 3, 4, 5].map((e,i) => e === 2 ? i : undefined).filter(x => x) //returns [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
返回多个值(代替查找方法)
[5, 12, 8, 130, 44].map((e,i) => e > 13 ? e : undefined).filter(x => x) // returns [130, 44]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40503 次 |
| 最近记录: |