首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用map翻译forEach语句

使用map翻译forEach语句
EN

Stack Overflow用户
提问于 2021-02-20 21:36:00
回答 1查看 74关注 0票数 1

我试图通过使用map函数重写我使用forEach方法编写的代码。但我不知道如何用我使用映射编写的代码来检查order.FunctionStatusList的空值。更具体地说,如何将代码包含在带有orderAction.OrderList的the语句中。

下面是带有foreach的代码:

代码语言:javascript
运行
复制
        this.orders.forEach((order: Order) => {
            let orderAction: OrderAction = new OrderAction();
            orderAction.FunctionTypeCode = this.functionTypeCode;
            orderAction.SelectedAction = this.actionSelected;
            if (order.FunctionStatusList != null) {
                order.FunctionStatusList.forEach(orderFunctionStatus: OrderFunctionStatus  => {
                    orderAction.OrderList = [{
                        OrderId: order.OrderId,
                        AvailableActions: orderFunctionStatus.AvailableActions,
                        IsAvailableActions: orderFunctionStatus.AvailableActions.length > 0,
                        ValidationMessage: OrderFunctionStatus.ValidationMessage
                    }];
                });
            }
            else {
                orderAction.OrderList = [{
                    OrderId: order.OrderId,
                    AvailableActions: [],
                    IsAvailableAction: false,
                    ValidationMessage: ''
                }];
            }
            this.orderActionList.push(orderAction);
        });

下面是带有地图的代码:

代码语言:javascript
运行
复制
            this.orderActionList = this.orders.map(order => ({
            FunctionTypeCode: this.functionTypeCode,
            SelectedAction: this.actionSelected,
            OrderList: order.FunctionStatusList? order.FunctionStatusList.map((orderFunctionStatus: OrderFunctionStatus) => ({
                OrderId: order.OrderId,
                AvailableActions: orderFunctionStatus.AvailableActions,
                IsAvailableAction: orderFunctionStatus.AvailableActions.length > 0,
                ValidationMessage: orderFunctionStatus.ValidationMessage
            })):[]
        })

编辑这里是订单的json格式:

代码语言:javascript
运行
复制
{
    "OrderId": "1",
    "FunctionStatusList": [{
        "FunctionTypeCode": "1",
        "AvailableActions": [{
            "ActionLabel": "1",
            "ActionValue": "1"
        }]
    }]
 }

以下是order-action json应该看到的样子:

代码语言:javascript
运行
复制
    {
"FunctionTypeCode": "1",
"SelectedAction: "1",
"OrderList": [{
   "OrderId": "1",
   "IsAvailableActionsLoaded": "1",
   "AvailableActions": [{
      "ActionLabel": "1",
      "ActionValue": "1"
   }]
}]

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-20 22:58:21

好的,您正经历正确的方向,您只需在您开发的代码中引入else子句,即冒号之后传递的属性。

您以一种优雅的方式解决了这个问题,ternary operator允许创建一个内联if... else语句,在这里可以引入所需的条件。

我尝试并开发了简单的JS代码,所以请原谅我删除了.this和类型断言。

我在您提供的代码示例中添加了一个ValidationMessage属性。不管是哪种方式,再一次,使用三元操作符,您可以检查它是否真实。如果不是,可以添加''

注意:我假设您从其他地方获得functionTypeCodeactionSelected,这就是为什么我将它们作为常量添加到函数中。

代码语言:javascript
运行
复制
const orderActionFormatter = (input) => {
    const functionTypeCode = 1;
    const actionSelected = 1;
    return input.map(order => {
        return ({
            FunctionTypeCode: functionTypeCode,
            SelectedAction: actionSelected,
            OrderList: order.FunctionStatusList != null ? order.FunctionStatusList.map(orderFunctionStatus => {
                return ({
                    OrderId: order.OrderId,
                    AvailableActions: orderFunctionStatus.AvailableActions,
                    IsAvailableAction: orderFunctionStatus.AvailableActions.length > 0,
                    ValidationMessage: !!orderFunctionStatus.ValidationMessage ? orderFunctionStatus.ValidationMessage : ''
                })
            }) : {
                OrderId: order.OrderId,
                AvailableActions: [],
                IsAvailableAction: false,
                ValidationMessage: ''
            }
        })
    })
}

const input = [{"OrderId":"1","FunctionStatusList":[{"FunctionTypeCode":"1","AvailableActions":[{"ActionLabel":"1","ActionValue":"1"}],"ValidationMessage":"foo bar"}]}];
const inputNullFunctionStatusList = [{"OrderId":"1","FunctionStatusList":null}]

 console.log(orderActionFormatter(input))
 console.log(orderActionFormatter(inputNullFunctionStatusList))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66296806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档