Многие разрабтчики C# привыкли
использовать LINQ и очень часто
сталкиваются с проблемами когда требуется выполнить подобные операции на JavaScript. К счастью JavaScript позволяет сделать практически то же самое что и LINQ с помощью нативных функций,
не прибегая к использованию сторонних библиотек. Данная статья составлена в
виде шпаргалки, которая поможет разработчиками C# писать код на JavaScript используя принципы LINQ.
Ниже представлен простой массив объектов "person". Он будет
использоваться далее для иллюстрации возможных подходв.
var
people = [
{ name: "John",
age: 20 },
{ name: "Mary",
age: 35 },
{ name: "Arthur",
age: 78 },
{ name: "Mike",
age: 27 },
{ name: "Judy",
age: 42 },
{ name: "Tim",
age: 8 }
];
Использование функции filter вожет быть эквивалентом выражения Where
var
youngsters = people.filter(function (item) {
return
item.age < 30;
});
console.log("People younger than 30");
console.log(youngsters);
Использование функции map позволяет сделать то, для чего применяется Select
var
names = people.map(function (item) {
return
item.name;
});
console.log("Just the names of people");
console.log(names);
Функцию every можно назвать эквивалентом All
var
allUnder40 = people.every(function (item) {
return
item.age < 40;
});
console.log("Are all people under 40?"); // false
console.log(allUnder40);
Ниже представлено несколько эквивалентов Any
var
anyUnder30 = people.some(function (item) {
return
item.age < 30;
});
console.log("Are any people under 30?");
console.log(anyUnder30);
// true
Используйте фунцкию reduce для того что бы получить эквивалент Aggregate или
Sum.
var
aggregate = people.reduce(function (item1,
item2) {
return {
name: '', age: item1.age + item2.age };
});
console.log("Aggregate age");
console.log(aggregate.age);
// { age: 210 }
Функция sort может помочь получить эквивалент OrderBy, но в дополнение к
этому она еще и массив отсортирует.
var
orderedByName = people.sort(function (a, b) {
return
a.name > b.name ? 1 : 0;
})
console.log("Ordered by name");
console.log(orderedByName);
Ну и разумеется вы можете выстраивать цепочки вызовов всех этих функций,
точно также как и в LINQ.
var
namesOfPeopleOver30OrderedDesc = people.filter(function
(person) {
return
person.age > 30;
}).
map(function
(person) {
return
person.name;
}).
sort(function
(a, b) {
return
a < b ? 1 : 0;
});
console.log("And now.. the names of all people over 30 ordered by
name descending");
console.log(namesOfPeopleOver30OrderedDesc);
Разумеется LINQ предоставляет более гибкие, эффективные и более удобные возможности работы
с коллекциями. Однако функции описанные в статье и подходы к их использованию –
это прекрасный шанс писать такой же эффективный код и на JavaScript. Пусть синтаксис и отличается от привычного но LINQ, но возможности языка JavaScript даже на уровне базовых функцию позволяют использовать его в привычном
стиле. Если вам этого показалось недостаточно, вы всегда можете обратиться с сторонним библотекам, которые
предоставляют куда более цельные и унифицированные решения.
Так или иначе неразрешимых сложностей нет.
По мотивам публикации https://gist.github.com/DanDiplo/30528387da41332ff22b
Комментариев нет:
Отправить комментарий