javascript中的array.select()

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上).


Tim*_*Tim 5

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)


sil*_*lly 5

你可以用这样的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)

  • 你的方法只返回匹配它的第一个项不返回像ruby那样的数组.虽然它会有一个很小的变化:Array.prototype.select = function(test){var new_array = [] for(var n = 0; n <this.length; n ++){if(test(this [n])) {new_array.push(this [n]); 返回new_array; }; (2认同)

Sta*_*cat 5

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)

  • 这个只返回找到的第一个元素 (5认同)
  • 不是这里要求的那个,而是我正在寻找的那个。谢谢! (2认同)