我有一个arrayJSONconfig数据。

var config =  [ [{'state': 'step1'}],
                [{'state': 'step2'}] ,
                [{'state': 'step3'}]
              ];

config中,数据是有序的。
我也有一个JSONEvents数据,其中有这些state,但它们不是按顺序排列的。我想根据Events转换config下面的数据。
Events: [
           { Status: 'rendered',  State: 'step2' },
           { Status: 'rendered',  State: 'step3' },
           { Status: 'rendered',  State: 'step1' } ,
           { Status: 'completed', State: 'step3'}
       ],

此外,配置的最后一步将有两个条目,对于该呈现状态,应该在完成之前。
我期望的结果是:
Events: [
            { Status: 'rendered',  State: 'step1' },
            { Status: 'rendered',  State: 'step2' },
            { Status: 'rendered',  State: 'step3' } ,
            { Status: 'completed', State: 'step3' }
        ]

注:到目前为止,我还没有任何工作/容易出错的代码基本上,我无法考虑如何合并config来对Events进行更改。
谢谢

最佳答案

config转换为字符串数组,然后在比较该数组中.sort属性的indexOf差异时使用States

var config =  [ [{'state': 'step1'}],
        [{'state': 'step2'}] ,
        [{'state': 'step3'}]
      ];
const Events = [
   { Status: 'rendered',  State: 'step2' },
   { Status: 'rendered',  State: 'step3' },
   { Status: 'rendered',  State: 'step1' } ,
   { Status: 'completed', State: 'step3'}
];

const eventOrders = config.map(([{ state }]) => state);
Events.sort((a, b) => (
  eventOrders.indexOf(a.State) - eventOrders.indexOf(b.State)
  || Events.indexOf(a) - Events.indexOf(b)
));
console.log(Events);

09-10 06:36
查看更多