2016-07-29 148 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

不客氣,不要忘記標記我的答案是最好的。 :) –