2016-07-29 21 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 method который ссылается из System.Linq имен.

Итак, мой вопрос: что такое .singleOrDefault(x => x % 2 === 0), вызванный в этом случае (в javascript)?

+2

лямбда-выражение? анонимная функция? –

+0

его обезьяна исправлена ​​функция. –

+0

Вы спрашиваете, какие функции, такие как '.singleOrDefault()' вызываются, или что вызывается 'x => x% 2 === 0', или ...? (Кстати, ваша функция, похоже, делает в основном то же самое, что и стандартный массив ['.find()' method] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/ Array/find).) – nnnnnn

ответ

0

Похоже трехкомпонентной операнда будет заменителем в 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 Его функция проверяет значения - с целью определения, является ли значение «одиночным» или «по умолчанию» ». Возврат на это (истина или ложь) с использованием тройной функции - это самая близкая вещь, которую я могу придумать в 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

Добро пожаловать, не забудьте отметить мой ответ как лучший. :) –

Смежные вопросы