Javascript 一个现有的JS方法来迭代像find()这样的数组,但将返回我的inspect方法生成的值,而不是数组元素
我发现自己想多次做同样的事情,我可以用for循环很容易地编写,但我发现自己想知道是否有一种现有的方法可以更容易地使用 我基本上需要类似find()的东西,它将在数组的每个元素上运行一个方法,以查找我关心的元素。但当我找到值时,我希望方法返回我生成的任何值 举一个例子,我主要想要一个这样的方法来检查错误值。假设我有一个函数foo,它在数组上迭代,直到我返回某个东西,然后带着返回的值退出。我可以用它来检查一个大数组的错误,就像这样Javascript 一个现有的JS方法来迭代像find()这样的数组,但将返回我的inspect方法生成的值,而不是数组元素,javascript,Javascript,我发现自己想多次做同样的事情,我可以用for循环很容易地编写,但我发现自己想知道是否有一种现有的方法可以更容易地使用 我基本上需要类似find()的东西,它将在数组的每个元素上运行一个方法,以查找我关心的元素。但当我找到值时,我希望方法返回我生成的任何值 举一个例子,我主要想要一个这样的方法来检查错误值。假设我有一个函数foo,它在数组上迭代,直到我返回某个东西,然后带着返回的值退出。我可以用它来检查一个大数组的错误,就像这样 const errorMessage = myArray.foo(
const errorMessage = myArray.foo( (element) => {
if ( element.value < minValue ) {
return `{element.name} is less than {minValue}`;
}
if ( element.value > maxValue ) {
return `{element.name} is greater than {maxValue}`;
}
// insert other error checks
})
if (errorMessage)
Alerts.sendError(errorMessage);
else
// whatever I'd do if no error happened
const errorMessage=myArray.foo((元素)=>{
if(element.valuemaxValue){
返回`{element.name}大于{maxValue}`;
}
//插入其他错误检查
})
如果(错误消息)
警报。发送错误(errorMessage);
其他的
//如果没有错误我会怎么做
我可以自己写,但是是否有一个已经存在的方法可以在原始JS或下划线.JS这样的公共支持库中实现类似的功能?是的,有函数
您的代码应该如下所示:
var error = null;
const checkElementValue = function(element) {
if (element < minValue) {
error = `{element.name} is less than {minValue}`;
}
if (element.value > maxValue) {
error = `{element.name} is greater than {maxValue}`;
}
return (error !== null)
// insert other error checks
};
if (yourArray.some(checkElementValue)) {
console.log(error);
}
var result = [myArray.find(function(el) {
return el.value < minValue;
})].map(function(element) {
return element.name + ' value is less than ' + minValue;
}).shift();
var错误=null;
常量checkElementValue=函数(元素){
if(元素<最小值){
错误=`{element.name}小于{minValue}`;
}
如果(element.value>maxValue){
错误=`{element.name}大于{maxValue}`;
}
返回(错误!==null)
//插入其他错误检查
};
if(yourArray.some(checkElementValue)){
console.log(错误);
}
来自文档:
查找查找(列表、谓词、[context])
别名:检测
查看列表中的每个值,返回第一个通过真值测试(谓词)的值,如果没有值通过测试,则返回未定义的值。该函数在找到可接受的元素后立即返回,并且不会遍历整个列表。如果要在单个值与条件匹配时返回自定义响应,则不能仅调用任何内置方法 所有方法(
find()
,filter()
,some()
)将返回布尔值或相关值
我认为您需要组合两种或两种以上的方法来获得所需的内容,例如,您可以组合find()
、map()
和shift()
这样的方法:
var error = null;
const checkElementValue = function(element) {
if (element < minValue) {
error = `{element.name} is less than {minValue}`;
}
if (element.value > maxValue) {
error = `{element.name} is greater than {maxValue}`;
}
return (error !== null)
// insert other error checks
};
if (yourArray.some(checkElementValue)) {
console.log(error);
}
var result = [myArray.find(function(el) {
return el.value < minValue;
})].map(function(element) {
return element.name + ' value is less than ' + minValue;
}).shift();
我偶然发现了一种方法,它对我通常的用例比较有效 较新版本的for…(for…)语法对此非常有效。在我看来,新语法就像forEach循环一样干净,而且因为它不是一个函数,所以当我找到想要的值时,我可以简单地返回它
由于良好的编码实践通常会让我在助手函数中包装错误检查或大多数其他类似的逻辑,为了更好地自我记录,当我找到想要的值时,简单地返回通常是安全的。是的,这不是我所说的我要找的,但它有助于清晰地激发问题的动机,因此我想至少为其他人记录它。关于
数组。reduce
?您只想要一个结果还是多个结果?是否要为每个对象返回自定义的响应
?@chsdk一个值。我想在找到一个相关文件后立即停止处理value@chsdk是的,但我宁愿在那一点上写一个老式的for循环。如果没有一个现有的函数来实现它,我认为这是合理的,但由于缺乏响应,我认为情况并非如此,那么使用for循环和break语句(这是最自我记录的语句)来实现它会更干净。我不认为这符合我在问题中提出的要求。如果我找到一个值,它不允许我从函数返回一个计算值。当然,函数可以返回true或false。但是,它可能有副作用,因此在您的情况下,可以将错误消息分配给在父范围中定义的变量(例如,您可以在全局范围中定义errorMsg变量,并在返回true或false之前在errorMessage函数中使用它)。我刚刚编辑了我的答案,因此您可以确切地了解我的意思。啊,我现在更明白了。是的,这是可行的,尽管我希望有一个更明确的方法,只是出于自我记录代码的原因。这种方法不会宣传它正在利用副作用,因此有可能让新阅读代码的人感到困惑。不过,如果没有更好的选择,我还是会接受的。好的,谢谢。为了使代码能够自我记录,也许您应该将我上面编写的功能包装成一个名称良好的函数(例如getErrorMessage),该函数将返回错误消息(如您的示例中所示)。我认为这不符合我的要求吗?据我所知,它不允许我返回在检查元素时生成的特殊值?