我有两个数组(数组1和数组2)。它们都共享ID类型(阵列1的第2列和阵列2的第0列)。我只想在该ID中存在匹配项时垂直合并两个数组。
起始数组:
array1 = [[AB2C, Red, 113] <--Match
[BE4F, Green,164]
[AE3G, Blue, 143]]; <--Match
array2 = [[143, FabricB2, W5] <--Match
[189, FabricC9, W4]
[113, FabricA3, W5]]; <--Match
所需的结尾数组
array3 = [[AB2C, Red, 113, FabricA3, W5]
[AE3G, Blue, 143, FabricB2, W5]];
在我看来,最有效的方法是:
对于第2步,我一直试图通过如下所示的push and map组合将Array 1推到Array 3,但是它不能正常工作。我的意图是获取数组1的每一行,将其遍历数组2的每一行以检查是否匹配;如果有匹配项,则推到数组3。
对于第3步,我的想法是获取数组3的第2列的每一行,将其遍历数组2的第0列的每一行,并在找到匹配项时将其与数组3结合起来。第2步以便达到此目的。
非常感谢您的帮助!
array1 = [[AB2C, Red, 113]
[BE4F, Green,164]
[AE3G, Blue, 143]];
array2 = [[143, FabricB2, W5]
[189, FabricC9, W4]
[113, FabricA3, W5]];
array3 = [];
array3.push(array1.map( function(e) { return e[2] == array2.map ( function (f) { return f[0] } ) }));
我认为这应该为您解决问题:
let array1 = [['AB2C', 'Red', 113], ['BE4F', 'Green',164], ['AE3G', 'Blue', 143]];
let array2 = [[143, 'FabricB2', 'W5'], [189, 'FabricC9', 'W4'], [113, 'FabricA3', 'W5']];
let array3 = []
array1.forEach(i => {
let match = i[2]
array2.forEach(j => {
if(j[0] === match) {
array3.push([...i, j[1], j[2]])
}
})
})
console.log(array3)
array1 = [
['AB2C', 'Red', 113],
['BE4F', 'Green', 164],
['AE3G', 'Blue', 143],
];
array2 = [
[143, 'FabricB2', 'W5'],
[189, 'FabricC9', 'W4'],
[113, 'FabricA3', ' W5'],
];
const res = array1
.map(x => array2
.filter(y => y[0] === x[2])
.map(y => [x[0], x[1], ...y]))
.flatMap(x => x)
console.log(res)
const array1 = [
['AB2C', 'Red', 113],
['BE4F', 'Green', 164],
['AE3G', 'Blue', 143],
];
const array2 = [
[143, 'FabricB2', 'W5'],
[189, 'FabricC9', 'W4'],
[113, 'FabricA3', ' W5'],
];
const array2Map = new Map;
array2.forEach(row => array2Map.set(row[0], [row[1],row[2]]));
const out = array1.filter(row => array2Map.has(row[2]) && row.push(...array2Map.get(row[2])));
console.info(out)
这是您可能感兴趣的另一种方法。
现在我们在Apps脚本中具有V8运行时,您可以利用AlaSQL之类的第三方库来执行复杂的SQL查询。
只需将最新版本的AlaSQL(full或minified)复制并粘贴到您的Apps脚本项目中的脚本文件中即可。
然后您可以运行如下查询:
const arr1 = [
['AB2C', 'Red', 113],
['BE4F', 'Green', 164],
['AE3G', 'Blue', 143],
].map( ([code, color, id]) => ({id, color, code}));
const arr2 = [
[143, 'FabricB2', 'W5'],
[189, 'FabricC9', 'W4'],
[113, 'FabricA3', 'W5'],
].map( ([id, fabric, textile]) => ({id, fabric, textile}));
const query = `
SELECT arr1.id, arr1.code, arr1.color, arr2.fabric, arr2.textile
FROM ? AS arr1
INNER JOIN ? AS arr2 ON arr1.id = arr2.id
`;
var res = alasql(
query,
[arr1, arr2]
).map(
({id, code, color, fabric, textile}) => [code, color, id, fabric, textile]
);
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/alasql/0.5.5/alasql.min.js"></script>
我对您的数据表有一些自由,将它们从数组数组转换为对象数组,然后使用解构分配再次返回。这种方法的真正优势在于,它允许您利用标准SQL在多个数据集中运行各种复杂的查询。