2016-07-29 15 views
-2

私はC#から来ました。 C#構文を持つ小さな例:このテクニクは何と呼ばれていますか?

// using System.Linq; 

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

私はjavascriptの構文にその構文をconvertしたい:C#ので

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>

.SingleOrDefault(TSource)System.Linq名前空間から参照Linq methodと呼ばれています。

私の質問は次のとおりです:.singleOrDefault(x => x % 2 === 0)はこの場合(JavaScriptで)呼び出されていますか?

+2

ラムダ式?匿名機能? –

+0

その猿のパッチ機能。 –

+0

'.singleOrDefault()'のような関数が呼び出されるか、 'x => x%2 === 0'の部分が呼び出されるか、または...? (ところで、あなたの関数は基本的に配列['.find()'メソッドと同じことをしているようです(https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/ Array/find)を参照してください。) – nnnnnn

答えて

0

三オペランドが、私はあなたが同じ関数を呼び出すJSライブラリを使用すべきだと思うJS

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

+1

あなたはその結論にどのように到達したのか分かりません。その関数を三項演算子**で置き換えることはできません**。 – nnnnnn

+0

オペランドは、オペレータが操作する要素です。これは私が参照しているものです。これは長年の男でした、私は私の用語を知っています - しかし、ありがとう。ここで、多分あなたはリフレッシャーが必要かもしれません:https://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx 彼の機能はテスト値です - 値が "single"か "default" "三元関数を使用して(真または偽の)それの戻り値は、JSで考えることができる最も近いもので、 "if"条件の束を必要としません。 – Korgrue

+0

OK、申し訳ありませんが、私はまだOPがやっていることに関連してあなたが言っていることを理解していません。 OPには既にtrueまたはfalseを返すJS式があるので、OPでやっていることにJSの中で最も近いものは、すでに*行っていることです。(PSあなたの用語を知っていることについては、あなたは "論理"を "要素"に置き換えた;私たちはすべて間違いを犯す...) – nnnnnn

1

で代用だろうように見える: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

あなたは大歓迎です、私の答えを最高にすることを忘れないでください。 :) –

関連する問題