2016-07-29 150 views
-2

我来自C#。一个小例子与C#语法:这个技术叫什么?

// using System.Linq; 

int[] array = { 1, 2, 3, 5 }; 
int result = array.SingleOrDefault(x => x % 2 == 0); 

我想这句法convert到JavaScript语法:

Array.prototype.singleOrDefault = function (tsource) { 
 
\t var $self = this 
 
\t if ($self.length) { 
 
    \t for (let i = 0; i < $self.length; i++) { 
 
    \t if (tsource($self[i])) { 
 
     \t return $self[i] 
 
     } 
 
    } 
 
    return null 
 
    } 
 
}; 
 

 
var test = function() { 
 
    var array = [1, 2, 3, 5]; 
 
    var result = array.singleOrDefault(x => x % 2 === 0) 
 
    if (result !== null) { 
 
    \t alert(result) 
 
    } 
 
};
<button onclick="test()">Click me</button>

在C#:.SingleOrDefault(TSource)Linq methodSystem.Linq命名空间引用。

所以,我的问题是:什么是在这种情况下(在JavaScript中)叫.singleOrDefault(x => x % 2 === 0)

+2

lambda表达式?匿名函数? –

+0

其猴子修补功能。 –

+0

你在问什么函数像'.singleOrDefault()'被调用,或者调用了什么'x => x%2 === 0'部分,或者...? (顺便说一句,你的函数看起来和标准数组['.find()'方法]基本一样(https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/ Array/find)。) – nnnnnn

回答

0
+1

我不明白你是如何得出这个结论的。您不能用三元**运算符**替换该函数。 – nnnnnn

+0

操作数是操作员执行操作的元素 - 这就是我所指的。一直这样做很长一段时间的人,我知道我的术语 - 但谢谢。在这里,也许你需要一个刷新:https://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx 他的功能是测试值 - 意图确定值是“单”还是“默认”。使用三元函数返回(true或false)是我能想到的最接近JS的事情,不需要大量的“if”条件。 – Korgrue

+0

好的,对于术语感到抱歉,我仍然不明白你所说的与OP的作用有何关系。 OP已经有了一个JS表达式,它返回true或false,所以在JS中最接近的事情是OP正在做的是他们已经*做的事情。(PS关于知道你的术语,我*看到你的评论之前你用“元素”取代了“逻辑”;我们都犯了错误......) – nnnnnn

1

我认为你应该使用JS库调用相同的功能:https://linqjs.codeplex.com/

,其中含有约90 mehtods

这是关系到你的方法的例子。

var jsonArray = [ 
{ "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" }, 
{ "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" }, 
{ "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" }, 
{ "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" } 
] 
// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"] 
var queryResult = Enumerable.From(jsonArray) 
.Where(function (x) { return x.user.id < 200 }) 
.OrderBy(function (x) { return x.user.screen_name }) 
.Select(function (x) { return x.user.screen_name + ':' + x.text }) 
.ToArray(); 
// shortcut! string lambda selector 
var queryResult2 = Enumerable.From(jsonArray) 
.Where("$.user.id < 200") 
.OrderBy("$.user.screen_name") 
.Select("$.user.screen_name + ':' + $.text") 
.ToArray(); 
+0

尽管你不回答我的问题,但我喜欢'linqjs'。它很友善。谢谢! –

+0

不客气,不要忘记标记我的答案是最好的。 :) –