我使用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();但是我必须过滤并获得所有ids,这些ids具有红色和Linqs.js。
谢谢你的帮助。
发布于 2015-11-16 16:30:46
与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()和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>');
https://stackoverflow.com/questions/33739726
复制相似问题