pie*_*fou 61 javascript arrays
javascript是否具有与Ruby相似的功能?
array.select {|x| x > 3}
Run Code Online (Sandbox Code Playgroud)
就像是:
array.select(function(x) { if (x > 3) return true})
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 111
有Array.filter()
:
var numbers = [1, 2, 3, 4, 5];
var filtered = numbers.filter(function(x) { return x > 3; });
// As a JavaScript 1.8 expression closure
filtered = numbers.filter(function(x) x > 3);
Run Code Online (Sandbox Code Playgroud)
请注意,这Array.filter()
不是标准的ECMAScript,并且它没有出现在比ES5更早的ECMAScript规范中(感谢Yi Jiang和jAndy).因此,它可能不受其他ECMAScript方言的支持,如JScript(在MSIE上).
Underscore.js对于这些类型的操作来说是一个很好的库 - 它使用内置例程,如Array.filter(如果可用),或者如果没有则使用它自己的例程.
http://documentcloud.github.com/underscore/
文档将提供使用的概念 - javascript lambda语法远不如ruby或其他(我总是忘记添加一个显式的return语句),而范围是另一种容易被抓住的方法,但你可以做大多数事情很容易,除了惰性列表推导等构造.
来自.select()的文档( .filter()是相同的别名)
查看列表中的每个值,返回通过真值测试(迭代器)的所有值的数组.委托自然过滤器方法(如果存在).
var evens = _.select([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)
你可以用这样的select方法扩展你的JS
Array.prototype.select = function(closure){
for(var n = 0; n < this.length; n++) {
if(closure(this[n])){
return this[n];
}
}
return null;
};
Run Code Online (Sandbox Code Playgroud)
现在你可以使用这个:
var x = [1,2,3,4];
var a = x.select(function(v) {
return v == 2;
});
console.log(a);
Run Code Online (Sandbox Code Playgroud)
或者对于数组中的对象
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);
Run Code Online (Sandbox Code Playgroud)
Array.find()
ES6 中也有它返回它找到的第一个匹配元素。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
const myArray = [1, 2, 3]
const myElement = myArray.find((element) => element === 2)
console.log(myElement)
// => 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
115022 次 |
最近记录: |