簡體   English   中英

使用 JavaScript,如何根據列名數組連接兩個 arrays 對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM