在ES5中查找第一个带有回调的匹配元素
Finding the first matching element with a callback in ES5
是否有一个内置的数组方法,我可以提供一个匹配函数,它会返回第一个匹配?
var first = [1,2].whatIsThisFunction(function(v) { return v === 1; }); // 1
您可以使用some()函数:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
它对每个条目应用回调,并在第一次匹配时返回。
var myArray = [...];
function callback(item){
// Code
}
myArray.some(callback);
很容易设置:看看这个小提琴。
var first = [6,4,2,3,5];
var match;
function isOdd(item){
console.log(item);
if(item % 2 === 1){
match = item;
return true;
}
}
first.some(isOdd);
console.log("First match is :"+match);
考虑:
- indexOf:不回调,返回项的索引,或-1
- map:回调,返回相同长度的数组,而不是项目本身
- some/every:回调,如果发现则返回true,否则返回false
- filter:回调,返回包含过滤项的新数组
- forEach:回调,不返回任何东西,重复不必要的测试indexOf
- reduce:回调,返回任何东西,如果找到,可以将返回值作为参数返回和快捷方式。
就是这样:
alert([1, 2, 7].reduce(function (r, _, __, o) {
return r || o[o.indexOf(7)];
}, undefined));
没有indexOf的版本:
function getFirstValueFn(v) {
return function (r, a) {
return (a === v || r) && a;
};
}
alert([1, 2, 0, 7].reduce(getFirstValueFn(0), undefined)); // 0
alert([1, 2, 0, 7].reduce(getFirstValueFn(7), undefined)); // 7
alert([1, 2, 0, 7].reduce(getFirstValueFn(42), undefined)); // undefined
相关文章:
- 如何在没有回调的情况下获取有关元素的信息
- Material Design Lite所有元素加载JS回调
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- zclip:引用afterCopy回调中的sender元素
- 如何在 ajax 请求的回调中设置 ngInclude 元素的 src 属性
- 加载特定元素的 AJAX 内容(将 DOM 元素传递给 AJAX 回调函数)
- 在 JavaScript / jQuery 回调中使用“this”更改单击元素的文本
- 将 Javascript 单击回调分配给 Flash 元素
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 在 Backbone 中.js事件回调这是什么,以及如何访问触发的元素
- 如何使用 javascript 和 Httphandler 为文件上传添加带有表单元素的回调
- Javascript 数组映射“出现”以对缺少的元素执行回调
- 将当前元素作为参数传递给循环中的回调函数
- 对多个元素执行回调函数
- 加载多个元素时回调
- 维护事件回调中元素的顺序
- 将事件监听器(在回调函数中)添加到生成的元素中
- .json回调中的第一个元素.Shift()
- 正在执行元素atrribute中定义的回调