javascript - 如何使用 linqjs 链接 "SelectMany"调用(或展平 JSON)

标签 javascript linq linq.js

如何使用 linq.js 将两个 SelectMany 调用链接在一起。

给定以下 JSON 结构:

[
    {
        "UpFrontCost": "29.95",
        "Currency": "USDAUD",
        "FittingDate": "2013-07-08 06:30:16Z",
        "Widgets": [
            {
                "ID": 3,
                "Name": "Test1"
            },
            {
                "ID": 4,
                "Name": "Test19"
            },
            {
                "ID": 6,
                "Name": "Test8"
            }
        ]
    },
    {
        "UpFrontCost": "29.95",
        "Currency": "USDAUD",
        "FittingDate": "2013-07-08 06:30:16Z",
        "Widgets": [
            {
                "ID": 67,
                "Name": "Test1"
            },
            {
                "ID": 99,
                "Name": "Test19"
            },
            {
                "ID": 34,
                "Name": "Test8"
            }
        ]
    }
]

我想要所有“小部件”的列表(在此示例中为 6 个小部件的列表)。

最佳答案

您不需要真正链接任何东西。您的根对象是一个数组,您只想为该数组中的每个对象选择每个小部件。

var query = Enumerable.From(jsonObject)
    .SelectMany("$.Widgets") // Select each widget found in the Widgets property
    .ToArray();

要展平将父对象的每个属性附加到结果的小部件数组,您可以采用多种方法。您可以使用函数语法来使用嵌套查询。

var query = Enumerable.From(jsonObject)
    .SelectMany(function (item) {
        return Enumerable.From(item.Widgets)
            .Select(function (widget) {
                return {
                    ID: widget.ID,
                    Name: widget.Name,
                    UpFrontCost: item.UpFrontCost,
                    Currency: item.Currency,
                    FittingDate: item.FittingDate
                };
            });
    })
    .ToArray();

或者使用 lambda 字符串语法:

var query = Enumerable.From(items)
    .SelectMany("$.Widgets",
        // argument 1 ($) - the parent object
        // argument 2 ($$) - the selected object (a widget)
        "{ ID: $$.ID, Name: $$.Name, UpFrontCost: $.UpFrontCost, Currency: $.Currency, FittingDate: $.FittingDate }"
    )
    .ToArray();

关于javascript - 如何使用 linqjs 链接 "SelectMany"调用(或展平 JSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695075/

相关文章:

javascript - Protractor:如果一个场景失败,如何解决 promise 并停止跳过场景

javascript - 如何使用 Chromium 和 Delphi 6 在网页中将 "native functions"公开给 Javascript?

javascript - 将数组从 php 传递到 ajax 时,JSON 中位置 0 出现意外标记 C

c# - 查找过去最近的日期

c# - 带linq的子串?

javascript - 如何将图表数据点与数组中的图表数据点进行匹配

javascript - 在 linq.js 中使用 .Contains()

javascript - 测试中的 NestJS 全局模块

c# - 在 C# 中使用 Linq 创建仅包含唯一值的 DataTable