我正在尝试使用array.some
函数迭代一些数据,如果if语句成功,则返回field
。
我发现正在发生的事情是,我得到一个布尔返回,例如true
而不是实际变量(包含元素的详细信息)。
for (var index in allFields) {
const invalidField = allFields[index].some(function (field){
if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) {
return field;
}
});
if (invalidField) {
return invalidField;
}
}
我的代码循环遍历allFields
,其中包含索引下的字段列表。然后,它会将每个fieldKey
与另一组名为validation
的数据进行比较。
field
包含一个元素。我希望返回field
但是当我选中invalidField
时,我会true
而不是
答案 0 :(得分:6)
Array.prototype.some()
仅检查数组中的某个元素是否通过了回调函数中定义的测试。您应该使用返回第一个元素passig test
find
方法
答案 1 :(得分:1)
您正在寻找Array.prototype.filter
而不是Array.prototype.some
。
过滤器会执行您当前期望some()
执行的操作。如果一个或多个元素符合您的条件,some()
会返回一个布尔值,而filter()
会创建符合您条件的新元素数组。
答案 2 :(得分:1)
要获取元素,您需要使用array.filter()
for (var index in allFields) {
const invalidField = allFields[index].filter(function (field){
if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) {
return field;
}
});
if (invalidField.length > 0) { //check if returned anything
return invalidField[0];
}
}
如果您只想返回第一个,可以使用array.find()