Javascript 将两个一维数组映射为二维数组,然后用已知值填充
我只是想知道解决这个问题的最佳方法。我有两个一维数组,需要合并到一个网格中,第一个数组变成行,第二个数组变成列,这两个数组的大小都未知 我在考虑嵌套循环和.push,但有没有更优雅的解决方案呢 问题的第二部分稍微复杂一些。每个网格单元将根据行和列数据分配一个键。我有第三个数组,它包含这个键,作为数组索引中对象的属性,我需要将这个对象注入(或链接)到2D数组中正确的单元格。通常,大约80%的网格将在第三个数组中具有关联对象 数据集并不庞大;最大的网格只有大约400个单元,因此迭代解决方案可以工作,但感觉很脏。有没有更好的“计算机科学”方法或javascript数组方法可以让我实现我想要的 如果没有,则在迭代items数组和尝试在2D数组中找到正确的单元格之间,或者迭代2D数组并尝试在items数组中找到匹配的对象之间,是否存在任何重大的折衷,请记住,我是针对item属性而不是键进行匹配的 下面是示例代码Javascript 将两个一维数组映射为二维数组,然后用已知值填充,javascript,arrays,multidimensional-array,ecmascript-6,Javascript,Arrays,Multidimensional Array,Ecmascript 6,我只是想知道解决这个问题的最佳方法。我有两个一维数组,需要合并到一个网格中,第一个数组变成行,第二个数组变成列,这两个数组的大小都未知 我在考虑嵌套循环和.push,但有没有更优雅的解决方案呢 问题的第二部分稍微复杂一些。每个网格单元将根据行和列数据分配一个键。我有第三个数组,它包含这个键,作为数组索引中对象的属性,我需要将这个对象注入(或链接)到2D数组中正确的单元格。通常,大约80%的网格将在第三个数组中具有关联对象 数据集并不庞大;最大的网格只有大约400个单元,因此迭代解决方案可以工作,
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,比我虚弱的头脑所能想象的优雅得多。谢谢。这并不完全是我需要的答案,但它为我指明了正确的方向。我将运行您的代码,并为自己解决其余的问题。