Another LINQ provider for Javascript
npm install jslinq --save
bower install zenprogramming.jslinq --save
var data = [
{ id: 1, name: "one", category: 'fruits', countries: ["Italy", "Austria"] },
{ id: 2, name: "two", category: 'vegetables', countries: ["Italy", "Germany"] },
{ id: 3, name: "three", category: 'vegetables', countries: ["Germany"] },
{ id: 4, name: "four", category: 'fruits', countries: ["Japan"] },
{ id: 5, name: "five", category: 'fruits', countries: ["Japan", "Italy"] }
];
var queryObj = jslinq(data);
var result = queryObj
.count();
/*
result => 5
*/
var result = queryObj
.toList();
/*
result => [
{ id: 1, name: "one", ... },
{ id: 2, name: "two", ... },
{ id: 3, name: "three", ... },
{ id: 4, name: "four", ... },
{ id: 5, name: "five", ... }
];
*/
var result = queryObj
.singleOrDefault(function(el){
return el.name == "one";
});
/*
result => { id: 1, name: "one", ... };
*/
var result = queryObj
.select(function(el){
return el.id;
})
.toList();
/*
result => [1, 2, 3, 4, 5];
*/
var result = queryObj
.where(function(el){
return el.name == 'two';
})
.toList();
/*
result => [{ id: 2, name: "two", ... }];
*/
var result = queryObj
.groupBy(function(el){
return el.category;
})
.toList();
/*
result => [
{ key: 'vegetables', count: 2, elements: [...] },
{ key: 'fruits', count: 3, elements: [...] },
];
*/
var otherData = [
{ id: 7, name: "seven", category: 'vegetables' },
{ id: 8, name: "eight", category: 'fruit' }
];
var result = queryObj
.join(otherData)
.toList();
/*
result => [
{ id: 1, name: "one", ... },
{ id: 2, name: "two", ... },
{ id: 3, name: "three", ... },
{ id: 4, name: "four", ... },
{ id: 5, name: "five", ... },
{ id: 7, name: "seven", ... },
{ id: 8, name: "eight", ... }
];
*/
var extraData = ["A", "B", "C", "B", "A", "D"];
var result = jslinq(extraData)
.distinct()
.toList();
/*
result => ["A", "B", "C", "D"];
*/
var result = queryObj
.orderBy(function(el){
return el.name;
})
.toList();
/*
result => [
{ id: 5, name: "five", ... },
{ id: 4, name: "four", ... },
{ id: 1, name: "one", ... },
{ id: 3, name: "three", ... },
{ id: 2, name: "two", ... }
];
*/
var result = queryObj
.orderByDescending(function(el){
return el.name;
})
.toList();
/*
result => [
{ id: 2, name: "two", ... },
{ id: 3, name: "three", ... },
{ id: 1, name: "one", ... },
{ id: 4, name: "four", ... },
{ id: 5, name: "five", ... }
];
*/
var result = queryObj
.selectMany(function(el){
return el.countries;
})
.toList();
/*
result => [
"Italy", "Austria", "Italy", "Germany",
"Germany", "Japan", "Japan", "Italy"] }
];
var result = queryObj
.firstOrDefault(function(el){
return el.category == "vegetables";
});
/*
result => { id: 2, name: "two", ... };
*/
var result = queryObj
.lastOrDefault(function(el){
return el.category == "vegetables";
});
/*
result => { id: 3, name: "three", ... };
*/
var result = queryObj
.any(function(el){
return el.name == "two";
});
/*
result => true;
*/
var result = queryObj
.all(function(el){
return el.countries.length > 0;
});
/*
result => true;
*/
var result = queryObj
.skip(3)
.toList();
/*
result => [
{ id: 4, name: "four", ... },
{ id: 5, name: "five", ... }
];
*/
var result = queryObj
.take(2)
.toList();
/*
result => [
{ id: 1, name: "one", ... },
{ id: 2, name: "two", ... }
];
*/
var result = queryObj
.max(function(el){
return el.id;
});
/*
result => 5;
*/
var result = queryObj
.min(function(el){
return el.id;
});
/*
result => 1;
*/
var otherData = [
{ id: 2, name: "two", category: 'vegetables' },
{ id: 8, name: "eight", category: 'fruit' }
];
var result = queryObj
.intersect(otherData, function(el){
return el.id;
})
.toList();
/*
result => [
{ id: 2, name: "two", ... }
];
*/
var elementToRemove = queryObj
.singleOrDefault(function(el){
return el.id == 2;
});
var result = queryObj
.remove(elementToRemove)
.toList();
/*
result => [
{ id: 1, name: "one", ... },
{ id: 3, name: "three", ... },
{ id: 4, name: "four", ... },
{ id: 5, name: "five", ... }
];
*/
var elementsToSubtract = [
{ id: 2, name: "two", ... },
{ id: 4, name: "four", ... },
{ id: 7, name: "seven", ... }
];
var result = queryObj
.subtract(elementsToSubtract, function(el){
return el.id;
})
.toList();
/*
result => [
{ id: 1, name: "one", ... },
{ id: 3, name: "three", ... },
{ id: 5, name: "five", ... }
];
*/
var result = queryObj
.sum(function(el){
return el.id;
});
/*
result => 15
];
*/
var sampleData = [
{ value: 3 },
{ value: 2 },
{ value: 5 },
{ value: 2 },
];
var result = jslinq(sampleData)
.average(function(x) {
return x.value;
});
/*
result => 3
];
*/
var result = queryObj
.where(function(el) { return el.category == 'fruits' })
.select(function(el) { return el.id; })
.toList();
/*
result => [1, 4, 5];
*/
var result = queryObj
.where(function(el) {
//Check if element has at least one country equals to "Italy"
var hasItaly = jslinq(el.countries)
.any(function(c){
returc c == "Italy";
});
return hasItaly;
})
.toList();
/*
result => [
{ id: 1, name: "one", ... , countries: ["Italy", "Austria"] },
{ id: 2, name: "two", ... , countries: ["Italy", "Germany"] },
{ id: 5, name: "five", ... , countries: ["Japan", "Italy"] }
];
*/