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_Multidimensional Array_Ecmascript 6 - Fatal编程技术网

Javascript 将两个一维数组映射为二维数组,然后用已知值填充

Javascript 将两个一维数组映射为二维数组,然后用已知值填充,javascript,arrays,multidimensional-array,ecmascript-6,Javascript,Arrays,Multidimensional Array,Ecmascript 6,我只是想知道解决这个问题的最佳方法。我有两个一维数组,需要合并到一个网格中,第一个数组变成行,第二个数组变成列,这两个数组的大小都未知 我在考虑嵌套循环和.push,但有没有更优雅的解决方案呢 问题的第二部分稍微复杂一些。每个网格单元将根据行和列数据分配一个键。我有第三个数组,它包含这个键,作为数组索引中对象的属性,我需要将这个对象注入(或链接)到2D数组中正确的单元格。通常,大约80%的网格将在第三个数组中具有关联对象 数据集并不庞大;最大的网格只有大约400个单元,因此迭代解决方案可以工作,

我只是想知道解决这个问题的最佳方法。我有两个一维数组,需要合并到一个网格中,第一个数组变成行,第二个数组变成列,这两个数组的大小都未知

我在考虑嵌套循环和.push,但有没有更优雅的解决方案呢

问题的第二部分稍微复杂一些。每个网格单元将根据行和列数据分配一个键。我有第三个数组,它包含这个键,作为数组索引中对象的属性,我需要将这个对象注入(或链接)到2D数组中正确的单元格。通常,大约80%的网格将在第三个数组中具有关联对象

数据集并不庞大;最大的网格只有大约400个单元,因此迭代解决方案可以工作,但感觉很脏。有没有更好的“计算机科学”方法或javascript数组方法可以让我实现我想要的

如果没有,则在迭代items数组和尝试在2D数组中找到正确的单元格之间,或者迭代2D数组并尝试在items数组中找到匹配的对象之间,是否存在任何重大的折衷,请记住,我是针对item属性而不是键进行匹配的

下面是示例代码

let arrRow = [
    {"code":"S", "desc":"small"},
    {"code":"M", "desc":"med"},
    {"code":"L", "desc":"large"}
];
let arrCol = [
    {"code":"R", "desc":"Red"},
    {"code":"G", "desc":"Green"},
    {"code":"B", "desc":"Blue"}
];
let arrItems= [
    {"item":"SR", "desc":"Small Red"},
    {"item":"SB", "desc":"Small Blue"},
    {"item":"MB", "desc":"Med Blue"},
    {"item":"LB", "desc":"Large Blue"},
    {"item":"SG", "desc":"Small Green"},
    {"item":"LG", "desc":"Large Green"}
 ];
根据被申请人的要求。预期的结果将是

[
  [
    {"key":"SR", "value":{"item":"SR", "desc":"Small Red"}},
    {"key":"SG", "value":{"item":"SG", "desc":"Small Green"}},
    {"key":"SB", "value":{"item":"SB", "desc":"Small Blue"}
  ],
    {"key":"MR", "value":{}},
    {"key":"MG", "value":{}},
    {"key":"MB", "value":{"item":"MB", "desc":"Med Blue"}}
  ],
    {"key":"LR", "value":{}},
    {"key":"LG", "value":{"item":"LG", "desc":"Large Green"}},
    {"key":"LB", "value":{"item":"LB", "desc":"Large Blue"}}
  ]
]

或者,该值可以只是项数组中元素的索引,这可能更节省内存

您可以对数据使用一个索引,并迭代行和列

var arrRow=[{code:“S”,desc:“small”},{code:“M”,desc:“med”},{code:“L”,desc:“large”},
arrCol=[{code:“R”,desc:“Red”},{code:“G”,desc:“Green”},{code:“B”,desc:“Blue”}],
arrItems=[{项目:“SR”,描述:“小红”},{项目:“SB”,描述:“小蓝”},{项目:“MB”,描述:“中蓝”},{项目:“LB”,描述:“大蓝”},{项目:“SG”,描述:“小绿”},{项目:“LG”,描述:“大绿”},
map=arrItems.reduce((m,o)=>m.set(o.item,o),新map),
result=arrRow.map(r=>arrCol.map(c=>(map.get(r.code+c.code)| |{}).desc | |'');
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
请添加想要的结果和您尝试过的内容。每个方法都将使用某种形式的迭代,可以是自写的,也可以是隐藏的。例如
Array.prototype.reduce
Array.prototype.filter
将迭代所有值。我也同意尼娜的意见。你确定你真的需要2D阵列吗?您可能有许多冗余值(如果我正确理解您想要的)。是的,我想要“空”值作为项目的一部分,以可视化缺少的组合。在SQL世界中,这将是一个交叉连接(或笛卡尔乘积)美丽的Nina,比我虚弱的头脑所能想象的优雅得多。谢谢。这并不完全是我需要的答案,但它为我指明了正确的方向。我将运行您的代码,并为自己解决其余的问题。