JavaScript中的array.select()
JavaScript是否具有与Ruby类似的功能JavaScript中的array.select(),javascript,arrays,Javascript,Arrays,JavaScript是否具有与Ruby类似的功能 array.select {|x| x > 3} 比如: array.select(function(x) { if (x > 3) return true}) 存在Array.filter: 请注意,它不会出现在早于ES5的ECMAScript规范中,这要感谢Yi Jiang和jAndy。因此,其他ECMAScript方言(如MSIE上的JScript)可能不支持它 2020年11月更新:Array.filter适用于所有主要
array.select {|x| x > 3}
比如:
array.select(function(x) { if (x > 3) return true})
存在Array.filter:
请注意,它不会出现在早于ES5的ECMAScript规范中,这要感谢Yi Jiang和jAndy。因此,其他ECMAScript方言(如MSIE上的JScript)可能不支持它
2020年11月更新:Array.filter适用于所有主要浏览器。下划线.js是此类操作的良好库-如果可用,它使用内置例程,如Array.filter,如果不可用,则使用自己的例程 文档将给出一个使用的想法-javascript lambda语法远没有ruby或其他语法简洁,例如,我总是忘记添加显式返回语句,范围是另一种容易被发现的方法,但除了惰性列表理解等构造之外,大多数事情都可以很容易地完成 从docs for.select.filter是相同的别名 查看列表中的每个值,返回所需的所有值的数组 通过真理测试迭代器。委托给本机筛选器方法(如果存在)
var evens = _.select([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
你可以用这样的选择方法来扩展你的JS
Array.prototype.select = function(closure){
for(var n = 0; n < this.length; n++) {
if(closure(this[n])){
return this[n];
}
}
return null;
};
或用于数组中的对象
var x = [{id: 1, a: true},
{id: 2, a: true},
{id: 3, a: true},
{id: 4, a: true}];
var a = x.select(function(obj) {
return obj.id = 2;
});
console.log(a);
Array.filter在很多浏览器中都没有实现,如果它不存在,最好定义这个函数 Array.prototype的源代码发布在MDN中
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp */)
{
"use strict";
if (this == null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in t)
{
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}
看
有关更多详细信息,ES6中还有Array.find,它返回找到的第一个匹配元素
在某些情况下,您还可以使用映射功能,如下所示: var celsiusValues=[22,50,310,0,80]; var kelvinValues=celsiusValues.mapfunctionx{return x-273;};
console.logkelvin值//[-251,-223,37,-273,-193]您的方法只返回与之匹配的第一项,而不像ruby那样返回数组。不过它会有一个小小的改变:Array.prototype.select=functiontest{var new_Array=[]forvar n=0;n
var x = [{id: 1, a: true},
{id: 2, a: true},
{id: 3, a: true},
{id: 4, a: true}];
var a = x.select(function(obj) {
return obj.id = 2;
});
console.log(a);
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp */)
{
"use strict";
if (this == null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in t)
{
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}
const myArray = [1, 2, 3]
const myElement = myArray.find((element) => element === 2)
console.log(myElement)
// => 2