LINQ — это расширение языка в .NET Framework, используемое для запросов и обработки данных. JavaScript — это язык программирования высокого уровня, используемый для создания интерактивных веб-приложений и динамических веб-страниц как на стороне клиента, так и на стороне сервера. LINQ упрощает доступ к данным и манипулирование ими в C# или VB.NET, в то время как JavaScript широко используется для веб-разработки и является важной технологией в современных веб-браузерах.
Я надеюсь, что эта статья поможет разработчикам JS лучше понять функции LINQ, а разработчикам C#/VB.NET лучше понять JS.
Вот список наиболее часто используемых функций LINQ и их эквивалентов или похожих функций JavaScript:
Where
-filter
Select
-map
Sum
-reduce
Max
-Math.max
Min
-Math.min
Count
-length
or.reduce
First
-find
Last
-slice(-1)[0]
Any
-some
All
-every
OrderBy
-sort
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 является более гибким и обычно используется для написания сценариев на стороне клиента и разработки внешнего интерфейса.
Спасибо!
Ставьте 👏, если считаете это полезным!
Следуйте за мной, чтобы узнать больше!
👋👋👋