【问题标题】:Linq.js get subitemsLinq.js 获取子项
【发布时间】:2015-11-16 16:08:36
【问题描述】:

我正在使用 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();

但我必须使用 Linqs.js 过滤并获取所有具有 红色id

感谢您的帮助。

【问题讨论】:

    标签: javascript jquery json linq linq.js


    【解决方案1】:

    使用 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>');
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"&gt;&lt;/script&gt;

    或者使用纯 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>');

    【讨论】:

    • 非常感谢,它运行良好! @nina-scholz
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多