Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据存储在另一个数组中的引用对数组进行排序_Javascript_Arrays - Fatal编程技术网

Javascript 根据存储在另一个数组中的引用对数组进行排序

Javascript 根据存储在另一个数组中的引用对数组进行排序,javascript,arrays,Javascript,Arrays,这里的情况很奇怪,但我遇到过 我有两个用于此场景的对象数组,比如操作和行 在操作的内部我有如下格式的对象: { id: 'randomGeneratedId1', text: 'Click here', url: 'stackoverflow.com' } 在行的内部我有: { id: 'randomGeneratedId2', text: 'Line 1' } 最后,我有另一个数组,它存储这些的顺序。。。让我们称之为elementOrder [

这里的情况很奇怪,但我遇到过

我有两个用于此场景的对象数组,比如
操作

操作的内部
我有如下格式的对象:

{
    id: 'randomGeneratedId1',
    text: 'Click here',
    url: 'stackoverflow.com'
}
行的内部
我有:

{
    id: 'randomGeneratedId2',
    text: 'Line 1'
}
最后,我有另一个数组,它存储这些的顺序。。。让我们称之为
elementOrder

[
    { id: 'randomGeneratedId1', order: 1 },
    { id: 'randomGeneratedId2', order: 2 }
]
基本上,我想从上面提到的
elementOrder
中执行的操作,我想查看
操作
数组,并将它们按顺序放入最终数组中,因此我得到了一个数组的结果,该数组具有元素数据列表和ID,它们按顺序排列

结果是这样的原因是因为我有一个名为
class.line('line 1').action('Click here','stackoverflow.com').line(…).action(…).action(…)
我希望链接是无限的,但我需要在不同的对象中同时使用它们

我知道这是可能的,我已经试着绘制了地图等等,但我似乎不能把我的头围绕着它

  • 根据
    顺序
    字段对
    elementOrder
    数组进行排序
  • 循环通过已排序的
    elementder
    数组
  • 对于其中的每个元素,搜索
    操作
    数组以查找匹配项并基于此构建
    最终数组
  • 代码-

    var actions = [
      {
        id: 'randomGeneratedId1',
        text: 'Click here',
        url: 'stackoverflow.com'
      }]
    
    var lines = [
      {
        id: 'randomGeneratedId2',
        text: 'Line 1'
      }
    ]
    
    var elementOrder = [
      { id: 'randomGeneratedId2', order: 2 },
      { id: 'randomGeneratedId1', order: 1 }
    ]
    
    
    // this is where you build the final array
    var finalArray = elementOrder.sort((a, b) => a.order - b.order).map(ele => {
      var action = actions.find(action => ele.id === action.id);
      if (action) {
        return action;
      }
      var line = lines.find(line => ele.id === line.id);
      if (line) {
        return line;
      }
      return ele;
    });
    
    console.log(JSON.stringify(finalArray));
    // [{"id":"randomGeneratedId1","text":"Click here","url":"stackoverflow.com"},{"id":"randomGeneratedId2","text":"Line 1"}]
    

    您可以使用
    映射
    并直接使用所需函数调用函数链

    var action = [],
        lines = [],
        elementOrder = [],
        map = new Map;
    
    actions.forEach(payload => m.set(payload.id, { type: 'action', payload }));
    actions.forEach(payload => m.set(payload.id, { type: 'line', payload }));
    
    elementOrder.reduce((o, { id }) => {
        var data = m.get(id);
        return o[data.type](data.payload.text, data.payload.url)
    }, class);
    

    你想让他们直接打电话还是用通缉令的数组?@NinaScholz抱歉,你这是什么意思?