简体   繁体   English

将嵌套数组中的值设置为 null 的功能方法

[英]functional way to set value in nested array to null

I want to go through both objects below and if there is no assignment with the selected datetime between the start_timestamp and the end_timestamp the values table.translateY, table.translateX and masterId in the layouts object should be set to null.我想查看下面的两个对象,如果在 start_timestamp 和 end_timestamp 之间没有指定日期时间,则布局对象中的值 table.translateY、table.translateX 和 masterId 应设置为 null。

How can I achieve that?我怎样才能做到这一点?

My try:我的尝试:

    layouts = layouts.forEach(function(layout){
        assignments.forEach(function(assignment){
            layout.tables.map(function(table){
              if (table.id !== assignment.tableId && assignment.start_timestamp >= timestamp && !assignment.end_timestamp < timestamp) {
                table.translateY = null;
                table.translateX = null;
                table.masterId = null;
              }
          });
      })
    });

My layouts object looks like that:我的布局对象看起来像这样:

{  
      "id":31,
      "stationId":31,
      "tables":[  
         {  
            "id":652,
            "number":"040",
            "x":1285,
            "y":527,
            "length":98,
            "breadth":69,
            "rotation":0,
            "shape":"rectangle",
            "translateX":0,
            "translateY":0,
            "masterId":null,
            "seats":4
         },
         {
         ...
         }
       ]
}

My assignment object looks like this:我的赋值对象如下所示:

[ Assignment {
    id: 6798,
    tableId: 685,
    guestGroupId: 60725,
    start_timestamp: undefined,
    end_timestamp: undefined },
  Assignment {...}
]

The idea is to do an assignment lookup in your map It's really the only way.这个想法是在您的地图中进行分配查找。这确实是唯一的方法。 You don't want to be nesting loops of different data sets.您不想嵌套不同数据集的循环。

const newLayouts = layouts.map(layout =>
  layout.tables.map(table => {
    const assignment = assignments.find(({ id }) => id === table.id);
    if (
      assignment &&
      assignment.start_timestamp >= timestamp &&
      !assignment.end_timestamp < timestamp
    ) {
      return {
        ...table,
        translateY: null,
        translateX: null,
        masterId: null
      };
    }
    // Else
    return table;
  })
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM