LINQ — это расширение языка в .NET Framework, используемое для запросов и обработки данных. JavaScript — это язык программирования высокого уровня, используемый для создания интерактивных веб-приложений и динамических веб-страниц как на стороне клиента, так и на стороне сервера. LINQ упрощает доступ к данным и манипулирование ими в C# или VB.NET, в то время как JavaScript широко используется для веб-разработки и является важной технологией в современных веб-браузерах.

Я надеюсь, что эта статья поможет разработчикам JS лучше понять функции LINQ, а разработчикам C#/VB.NET лучше понять JS.

Вот список наиболее часто используемых функций LINQ и их эквивалентов или похожих функций JavaScript:

  1. Where - filter
  2. Select - map
  3. Sum - reduce
  4. Max - Math.max
  5. Min - Math.min
  6. Count - length or .reduce
  7. First - find
  8. Last - slice(-1)[0]
  9. Any - some
  10. All - every
  11. OrderBy - sort
  12. GroupBy - reduce

Давайте сравним их с некоторыми примерами кода.

1. Where - filter

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
// result: 2,4 

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var evenNumbers = numbers.filter(function(n) {
    return n % 2 === 0;
});
// result: 2,4 

2. Select - map

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var doubleNumbers = numbers.Select(n => n * 2);
// result: 2, 4, 6, 8, 10 

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var doubleNumbers = numbers.map(function(n) {
    return n * 2;
});
// result: 2, 4, 6, 8, 10 

3. Sum - reduce

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var sum = numbers.Sum();
// result: 30 

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var sum = numbers.reduce(function(acc, cur) {
    return acc + cur;
}, 0);
// result: 30

4. Max - Math.max

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var max = numbers.Max();
// result: 5

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var max = Math.max.apply(null, numbers);
// result: 5

5. Min - Math.min

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var min = numbers.Min();
// result: 1

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var min = Math.min.apply(null, numbers);
// result: 1

6. Count - length

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var count = numbers.Count();
// result: 5

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var count = numbers.length;
// result: 5

7. First - find

ЛИНК:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
int firstEven = numbers.Where(n => n % 2 == 0).First();
Console.WriteLine(firstEven); // Output: 2

JavaScript:

const numbers = [1, 2, 3, 4, 5];
const firstEven = numbers.find(n => n % 2 === 0);
console.log(firstEven); // Output: 2

8. Last - slice

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var last = numbers.Last();
// result: 5

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var last = numbers.slice(-1)[0];
// result: 5

9. Aggregate - reduce

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var product = numbers.Aggregate((a, b) => a * b);
// result: 120

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var product = numbers.reduce(function(a, b) {
    return a * b;
});
// result: 120

10. OrderBy - sort

ЛИНК:

var numbers = new List<int> { 5, 3, 4, 1, 2 };
var sortedNumbers = numbers.OrderBy(n => n);
// result: 1, 2, 3, 4, 5

JavaScript:

var numbers = [5, 3, 4, 1, 2];
var sortedNumbers = numbers.sort(function(a, b) {
    return a - b;
});
// result: 1, 2, 3, 4, 5

11. GroupBy - reduce

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var groupedNumbers = numbers.GroupBy(n => n % 2 == 0);
// result: (key: False, Values: 1,3,5), (key: True, Values: 2,4)

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var groupedNumbers = numbers.reduce(function(acc, cur) {
    var key = cur % 2 === 0 ? 'even' : 'odd';
    acc[key] = acc[key] || [];
    acc[key].push(cur);
    return acc;
}, {});

// result: { even: [ 2, 4 ], odd: [ 1, 3, 5 ] }

12. Join - reduce

ЛИНК:

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var words = new List<string> { "one", "two", "three", "four", "five" };
var joined = numbers.Join(words, n => n, w => int.Parse(w[0]), (n, w) => new { Number = n, Word = w });


foreach (var item in joined)
{
    Console.WriteLine("Number: " + item.Number + ", Word: " + item.Word);
}

Результатов будет: Number: 1, Word: one Number: 2, Word: two Number: 3, Word: three Number: 4, Word: four Number: 5, Word: five

JavaScript:

var numbers = [1, 2, 3, 4, 5];
var words = ["one", "two", "three", "four", "five"];
var joined = numbers.reduce(function(acc, cur) {
    var word = words.find(function(w) {
        return parseInt(w[0]) === cur;
    });
    acc.push({ Number: cur, Word: word });
    return acc;
}, []);

console.log(joined);

Результаты будут: [ { Number: 1, Word: 'one' }, { Number: 2, Word: 'two' }, { Number: 3, Word: 'three' }, { Number: 4, Word: 'four' }, { Number: 5, Word: 'five' } ]

Важно отметить, что функции JavaScript аналогичны функциям LINQ, но их синтаксис и возможности могут различаться. В целом, LINQ обеспечивает более структурированный и типобезопасный способ манипулирования коллекциями данных, в то время как JavaScript является более гибким и обычно используется для написания сценариев на стороне клиента и разработки внешнего интерфейса.

Спасибо!

Ставьте 👏, если считаете это полезным!

Следуйте за мной, чтобы узнать больше!

👋👋👋