【发布时间】:2022-11-16 11:16:30
【问题描述】:
假设我有一个看起来像这样的对象数组,它代表数据库中的所有记录:
let data1 = [
{"name": "ethan", "age": 18, "class": "A", "grade": 83},
{"name": "sam", "age": 13, "class": "A", "grade": 43},
{"name": "mark", "age": 14, "class": "D", "grade": 33},
{"name": "dick", "age": 14, "class": "B", "grade": 85},
{"name": "luke", "age": 15, "class": "A", "grade": 93},
{"name": "adam", "age": 5, "class": "C", "grade": 55},
]
我想根据一些列名“名称”和“类”执行连接,因为它们是主键。
let cols = ["name", "class"];
现在我有另一个对象数组
let data2 = [
{"name": "ethan", "age": 48, "class": "A", "grade": 49},
{"name": "dick", "age": 24, "class": "B", "grade": 43},
]
我想要一个循环遍历 data1 中每条记录的函数,然后检查“名称”值和“类”值是否与 data2 中在相同列中具有相同值的任何记录相匹配。如果是,则 data1 记录将被推送到一个新数组。新数组将在函数结束时返回。
例如,该函数将从 data1 中的第一项开始,{"name": "ethan", "age": 18, "class": "A", "grade": 83}, 并在 data2 中查找也具有名称的匹配记录“伊桑”和类“一个”,忽略其他列的值,如果找到匹配项,则{"name": "ethan", "age": 18, "class": "A", "grade": 83}被推送到输出数组。
这是我想象的函数的样子,我希望选中的键作为数组传递,以便解决方案是动态的。
function getSubset(cols, data1, data2) {
let output = [];
for (let i = 0; i < data1; i++) { //loop through each item in data1
let item = data1[I];
//checks here
//if match found in data2, push to output array
}
return output;
}
//expected output =
//[ {"name": "ethan", "age": 18, "class": "A", "grade": 83},
// {"name": "dick", "age": 14, "class": "B", "grade": 85},
//]
【问题讨论】:
-
那么,您的具体问题是什么?在我看来你的想法是对的。
-
因此,循环遍历
data2以比较每一行,并循环遍历cols以检查两个项目中所有相应的属性值是否相同。你到底有什么问题?
标签: javascript node.js json algorithm javascript-objects