javascript - 对两个数组执行查找并将第二个数组中的元素添加到第一个数组
问题描述
我有两个数组,我已经循环以匹配第二个数组vals1
中第一个数组的元素vals2
。如果元素(索引 [i][0])vals1
出现在vals2
(索引 [j][0])中,我需要对元素(索引 [j][1])进行分级vals2
并推送到vals1
(或创建一个新的包含所有元素的数组vals1
和一个来自vals2
)如果它不存在,我想分配“未分配”,我将使用来自 `vals2` 的元素 [j] [1]
So:
If vals1 = [[ 'item3', 3, 2, 6 ],[ 'item6', 4, 7, 28 ],[ 'item8', 1, 8, 8 ],[ 'item2', 6, 12, 72 ]]
and vals2 = [[ 'item1', 15 ],[ 'item2', 4 ],[ 'item3', 1 ],[ 'item4', 2 ]]
I'm looking for the following result:
[[ 'item3', 3, 2, 6,1 ],[ 'item6', 4, 7, 28,'Unassigned' ],[ 'item8', 1, 8, 8,Unassigned' ],[ 'item2', 6, 12, 72,4 ]]
我到目前为止的脚本是:
function lookup () {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('Sheet11');
var vals1 = sheet1.getRange(2,1,sheet1.getLastRow(),sheet1.getLastColumn()).getValues();
var sheet2 = ss.getSheetByName('Sheet12');
var vals2 = sheet2.getRange(2,1,sheet2.getLastRow(),sheet2.getLastColumn()).getValues();
console.log(vals1);
[
[ 'item3', 3, 2, 6 ],
[ 'item6', 4, 7, 28 ],
[ 'item8', 1, 8, 8 ],
[ 'item2', 6, 12, 72 ],
]
console.log(vals2);
[
[ 'item1', 15 ],
[ 'item2', 4 ],
[ 'item3', 1 ],
[ 'item4', 2 ]
]
var result =[];
for(var i=0;i<vals1.length;i++){
for(var j=0;j<vals2.length;j++){
var desc = vals1[i][0]
var qty = vals1[i][1]
var selling = vals1[i][2]
var total = vals1[i][3]
var desc2 = vals2[j][0]
var cost = vals2[j][1]
if(desc === desc2){
result.push([desc,qty,selling,total,cost])
} else {
result.push([desc,qty,selling,total,'Unassigned'])
}
}
}
console.log(result)
}
我得到的结果是:
[ [ 'item3', 3, 2, 6, 'Unassigned' ],
[ 'item3', 3, 2, 6, 'Unassigned' ],
[ 'item3', 3, 2, 6, 1 ],
[ 'item3', 3, 2, 6, 'Unassigned' ],
[ 'item3', 3, 2, 6, 'Unassigned' ],
[ 'item3', 3, 2, 6, 'Unassigned' ],
[ 'item2', 4, 7, 28, 'Unassigned' ],
[ 'item2', 4, 7, 28, 4 ],
[ 'item2', 4, 7, 28, 'Unassigned' ],
[ 'item2', 4, 7, 28, 'Unassigned' ],
[ 'item2', 4, 7, 28, 'Unassigned' ],
[ 'item2', 4, 7, 28, 'Unassigned' ],
[ 'item4', 1, 8, 8, 'Unassigned' ],
[ 'item4', 1, 8, 8, 'Unassigned' ],
[ 'item4', 1, 8, 8, 'Unassigned' ],
[ 'item4', 1, 8, 8, 2 ],
[ 'item4', 1, 8, 8, 'Unassigned' ],
[ 'item4', 1, 8, 8, 'Unassigned' ],
[ 'item2', 6, 12, 72, 'Unassigned' ],
[ 'item2', 6, 12, 72, 4 ],
[ 'item2', 6, 12, 72, 'Unassigned' ],
[ 'item2', 6, 12, 72, 'Unassigned' ],
[ 'item2', 6, 12, 72, 'Unassigned' ],
[ 'item2', 6, 12, 72, 'Unassigned' ],
[ 'item4', 3, 34, 102, 'Unassigned' ],
[ 'item4', 3, 34, 102, 'Unassigned' ],
[ 'item4', 3, 34, 102, 'Unassigned' ],
[ 'item4', 3, 34, 102, 2 ],
[ 'item4', 3, 34, 102, 'Unassigned' ],
[ 'item4', 3, 34, 102, 'Unassigned' ],
[ 'item3', 2, 8, 16, 'Unassigned' ],
[ 'item3', 2, 8, 16, 'Unassigned' ],
[ 'item3', 2, 8, 16, 1 ],
[ 'item3', 2, 8, 16, 'Unassigned' ],
[ 'item3', 2, 8, 16, 'Unassigned' ],
[ 'item3', 2, 8, 16, 'Unassigned' ],
[ 'item1', 8, 32, 256, 15 ],
[ 'item1', 8, 32, 256, 'Unassigned' ],
[ 'item1', 8, 32, 256, 'Unassigned' ],
[ 'item1', 8, 32, 256, 'Unassigned' ],
[ 'item1', 8, 32, 256, 'Unassigned' ],
[ 'item1', 8, 32, 256, 'Unassigned' ],
[ 'item1', 21, 32, 672, 15 ],
[ 'item1', 21, 32, 672, 'Unassigned' ],
[ 'item1', 21, 32, 672, 'Unassigned' ],
[ 'item1', 21, 32, 672, 'Unassigned' ],
[ 'item1', 21, 32, 672, 'Unassigned' ],
[ 'item1', 21, 32, 672, 'Unassigned' ],
[ 'item2', 2, 7, 14, 'Unassigned' ],
[ 'item2', 2, 7, 14, 4 ],
[ 'item2', 2, 7, 14, 'Unassigned' ],
[ 'item2', 2, 7, 14, 'Unassigned' ],
[ 'item2', 2, 7, 14, 'Unassigned' ],
[ 'item2', 2, 7, 14, 'Unassigned' ],
[ 'item5', 4, 6, 24, 'Unassigned' ],
[ 'item5', 4, 6, 24, 'Unassigned' ],
[ 'item5', 4, 6, 24, 'Unassigned' ],
[ 'item5', 4, 6, 24, 'Unassigned' ],
[ 'item5', 4, 6, 24, 4 ],
[ 'item5', 4, 6, 24, 'Unassigned' ],
[ 'item8', 9, 8, 72, 'Unassigned' ],
[ 'item8', 9, 8, 72, 'Unassigned' ],
[ 'item8', 9, 8, 72, 'Unassigned' ],
[ 'item8', 9, 8, 72, 'Unassigned' ],
[ 'item8', 9, 8, 72, 'Unassigned' ],
[ 'item8', 9, 8, 72, 'Unassigned' ],
[ 'item3', 16, 2, 32, 'Unassigned' ],
[ 'item3', 16, 2, 32, 'Unassigned' ],
[ 'item3', 16, 2, 32, 1 ],
[ 'item3', 16, 2, 32, 'Unassigned' ],
[ 'item3', 16, 2, 32, 'Unassigned' ],
[ 'item3', 16, 2, 32, 'Unassigned' ],
[ 'item7', 32, 6, 192, 'Unassigned' ],
[ 'item7', 32, 6, 192, 'Unassigned' ],
[ 'item7', 32, 6, 192, 'Unassigned' ],
[ 'item7', 32, 6, 192, 'Unassigned' ],
[ 'item7', 32, 6, 192, 'Unassigned' ],
[ 'item7', 32, 6, 192, 'Unassigned' ],
[ 'item6', 1, 21, 21, 'Unassigned' ],
[ 'item6', 1, 21, 21, 'Unassigned' ],
[ 'item6', 1, 21, 21, 'Unassigned' ],
[ 'item6', 1, 21, 21, 'Unassigned' ],
[ 'item6', 1, 21, 21, 'Unassigned' ],
[ 'item6', 1, 21, 21, 'Unassigned' ],
我正在使用的数据集分别有 1701 行和 228 行。当我最初运行脚本时,它打印了超过 400 000 行数据。
任何帮助将不胜感激
解决方案
- 遍历第一个二维数组 (
vals1
) 中的所有项目。例如,您可以使用forEach来做到这一点。 - 对于 中的每个项目
vals1
,您都希望在 中查找相同的项目vals2
。你可以使用find。由于 items 是每个内部数组中的第一个元素,因此您必须检查是否item1[0] === item2[0]
. - 如果找到该项目,则将相应的值推
item2[1]
送到该项目的内部数组中vals1
。 - 如果未找到该项目(
find
返回undefined
),则改为推送字符串"Unassigned"
。
代码片段:
function lookup(vals1, vals2) {
vals1.forEach(item1 => {
const item2 = vals2.find(item2 => item1[0] === item2[0]);
const newValue = item2 ? item2[1] : "Unassigned";
item1.push(newValue);
});
return vals1;
}
常规函数语法:
function lookup(vals1, vals2) {
vals1.forEach(function(item1) {
const item2 = vals2.find(function(item2) {
return item1[0] === item2[0]
});
const newValue = item2 ? item2[1] : "Unassigned";
item1.push(newValue);
});
return vals1;
}
推荐阅读
- pine-script - 卷值标签未显示在垂直卷的值栏上
- elasticsearch - Elasticsearch 不模糊
- javascript - 如何将滑块值与另一个值相加?
- javascript - 如何在 reactjs 中使用 Object Key 和 value 显示值?
- python - 手动将误差线添加到 seaborn 线标记图
- python - python中20维numpy矩阵的内存错误
- javascript - 重复函数时 setTimeout 的问题
- winforms - 触发属性更改时,具有数据绑定的表单元素不刷新
- c++ - 强制从子类覆盖父类的所有虚函数
- python - 如何调用在另一个模块/方法中构建的 DataFrame?