![](/img/trans.png)
[英]How to join two JavaScript arrays of JSON Objects, without using JQUERY?
[英]Using JavaScript, how to join two arrays of objects based on array of column names?
假設我有一個看起來像這樣的對象數組,它代表數據庫中的所有記錄:
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},
]
我想要一個 function 循環遍歷 data1 中的每條記錄,然后檢查“名稱”值和“類”值是否與 data2 中在相同列中具有相同值的任何記錄相匹配。 如果是,則 data1 記錄將被推送到一個新數組。 新數組將在 function 的末尾返回。
例如,function 將從 data1 中的第一項{"name": "ethan", "age": 18, "class": "A", "grade": 83}開始,並在中查找匹配記錄data2 也具有名稱“ethan”和 class “A” ,忽略其他列的值,如果找到匹配項,則{"name": "ethan", "age": 18, "class": "A", "grade": 83}被推送到 output 數組。
這是我想象的 function 的樣子,我希望選中的鍵作為數組傳入,以便解決方案是動態的。
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},
//]
您可以利用各種數組函數來實現它:
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 data2 = [ {"name": "ethan", "age": 48, "class": "A", "grade": 49}, {"name": "dick", "age": 24, "class": "B", "grade": 43}, ] let cols = ["name", "class"]; function getSubset(cols, data1, data2) { return data1.filter(d1 => data2.some(d2 => cols.every(key => d1[key] === d2[key]))); } const result = getSubset(cols, data1, data2); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.