Linq.js 获取子项
Linq.js get subitems
我正在使用 Linq.js 从数组中的 JSON 对象中获取元素的子集。
我有 JSON 对象数组,如下所示:
[
{
"buy": "Buy",
"type": "list",
"total": 0,
"product": [
{
"id": "12345",
"title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.",
"description": "Lorem ipsum dolor sit amet, consectetuer...",
"price": "9,95",
"modelo": [
{
"stock": "Y",
"color": "red"
},
{
"stock": "Y",
"color": "blue"
}
],
"Valor": 4.571429,
"Comments": 7
},
{
"id": "78945",
"title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.",
"description": "Lorem ipsum dolor sit amet, consectetuer...",
"price": "7,95",
"modelo": [
{
"stock": "Y",
"color": "green"
},
{
"stock": "Y",
"color": "red"
}
],
"Valor": 7.345256,
"Comments": 12
}
]
}
]
我可以这样按价格过滤:
var result = Enumerable.From(data)
.Where("$.price > 2")
.Select("$.price")
.ToArray();
但我必须过滤并获取所有具有 红色 和 [=28= 的 ids ].
感谢您的帮助。
使用 LINQ:
var data = [ { "buy": "Buy", "type": "list", "total": 0, "product": [ { "id": "12345", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "9,95", "modelo": [ { "stock": "Y", "color": "red" }, { "stock": "Y", "color": "blue" } ], "Valor": 4.571429, "Comments": 7 }, { "id": "78945", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "7,95", "modelo": [ { "stock": "Y", "color": "green" }, { "stock": "Y", "color": "red" } ], "Valor": 7.345256, "Comments": 12 } ] } ],
result = Enumerable.From(data[0].product)
.Where("($.modelo).some(function (x) { return x.color === 'red'; })")
.OrderBy("$.id")
.Select("$.id")
.ToArray();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>
或者简单地说 Javascript,具有 Array.prototype.filter()
, Array.prototype.some()
and Array.prototype.map()
.
var data = [ { "buy": "Buy", "type": "list", "total": 0, "product": [ { "id": "12345", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "9,95", "modelo": [ { "stock": "Y", "color": "red" }, { "stock": "Y", "color": "blue" } ], "Valor": 4.571429, "Comments": 7 }, { "id": "78945", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "7,95", "modelo": [ { "stock": "Y", "color": "green" }, { "stock": "Y", "color": "red" } ], "Valor": 7.345256, "Comments": 12 } ] } ],
result = data[0].product.filter(function (a) {
return a.modelo.some(function (b) {
return b.color === 'red';
});
}).map(function (a) { return a.id; });
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
我正在使用 Linq.js 从数组中的 JSON 对象中获取元素的子集。 我有 JSON 对象数组,如下所示:
[
{
"buy": "Buy",
"type": "list",
"total": 0,
"product": [
{
"id": "12345",
"title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.",
"description": "Lorem ipsum dolor sit amet, consectetuer...",
"price": "9,95",
"modelo": [
{
"stock": "Y",
"color": "red"
},
{
"stock": "Y",
"color": "blue"
}
],
"Valor": 4.571429,
"Comments": 7
},
{
"id": "78945",
"title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.",
"description": "Lorem ipsum dolor sit amet, consectetuer...",
"price": "7,95",
"modelo": [
{
"stock": "Y",
"color": "green"
},
{
"stock": "Y",
"color": "red"
}
],
"Valor": 7.345256,
"Comments": 12
}
]
}
]
我可以这样按价格过滤:
var result = Enumerable.From(data)
.Where("$.price > 2")
.Select("$.price")
.ToArray();
但我必须过滤并获取所有具有 红色 和 [=28= 的 ids ].
感谢您的帮助。
使用 LINQ:
var data = [ { "buy": "Buy", "type": "list", "total": 0, "product": [ { "id": "12345", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "9,95", "modelo": [ { "stock": "Y", "color": "red" }, { "stock": "Y", "color": "blue" } ], "Valor": 4.571429, "Comments": 7 }, { "id": "78945", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "7,95", "modelo": [ { "stock": "Y", "color": "green" }, { "stock": "Y", "color": "red" } ], "Valor": 7.345256, "Comments": 12 } ] } ],
result = Enumerable.From(data[0].product)
.Where("($.modelo).some(function (x) { return x.color === 'red'; })")
.OrderBy("$.id")
.Select("$.id")
.ToArray();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>
或者简单地说 Javascript,具有 Array.prototype.filter()
, Array.prototype.some()
and Array.prototype.map()
.
var data = [ { "buy": "Buy", "type": "list", "total": 0, "product": [ { "id": "12345", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "9,95", "modelo": [ { "stock": "Y", "color": "red" }, { "stock": "Y", "color": "blue" } ], "Valor": 4.571429, "Comments": 7 }, { "id": "78945", "title": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.", "description": "Lorem ipsum dolor sit amet, consectetuer...", "price": "7,95", "modelo": [ { "stock": "Y", "color": "green" }, { "stock": "Y", "color": "red" } ], "Valor": 7.345256, "Comments": 12 } ] } ],
result = data[0].product.filter(function (a) {
return a.modelo.some(function (b) {
return b.color === 'red';
});
}).map(function (a) { return a.id; });
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');