簡體   English   中英

條件合並2個二維數組

[英]Conditional merge 2 two dimensional arrays

我有2個數組

arr1 = [
    ['itemid-1', 'itemclass', 'timestamp'],
    ['itemid-2', 'itemclass', 'timestamp'],
    ['itemid-3', 'itemclass', 'timestamp'],
    ['itemid-5', 'itemclass', 'timestamp']
];

arr2 = [
    ['itemid-1', 'data-state', 'data-col'],
    ['itemid-3', 'data-state', 'data-col'],
    ['itemid-4', 'data-state', 'data-col']
];

最終結果應為:

arr1 = [
    ['itemid-1', 'itemclass', 'timestamp', 'data-state', 'data-col'],
    ['itemid-2', 'itemclass', 'timestamp'],
    ['itemid-3', 'itemclass', 'timestamp', 'data-state', 'data-col'],
    ['itemid-5', 'itemclass', 'timestamp']
];

我想將項目itemid-x相同的值從arr2合並到arr1

我可以使用循環來做到這一點

for(i = 0; i < arr1.length; i++){
    for(j = 0; j < arr2.length; j++){
        if(arr1[i][0] == arr2[j][0]){
            arr1[i] = arr1[i].concat(arr2[j].slice(1));
        }
    }

}

但是我最近開始使用underscorejs和nodejs,所以我想知道是否可以使用任何現有功能來完成它。

PS:我發現這個答案很有趣,但是它要求數組的長度是相同的,如果兩個數組中的itemid-x索引不同,它也將不起作用。

您的代碼可以正常工作,但是您可以對此進行改進。 由於使用的是排序數組,因此不需要兩個循環,它們使用m*n迭代。 您可以執行m+n次迭代以合並兩個數組,其中m = arr1.length和n = arr2.length

var i = j = 0;
var answer = [];

while (i < arr1.length && j < arr2.length)
{
    arr1ptr = arr1[i][0];  // Just for checking index
    arr2ptr = arr2[j][0];  // You can extract 'id' if you want

    if (arr1ptr == arr2ptr)
    {
        answer.push(arr1[i].concat(arr2[j].slice(1)));
        i++;
        j++;
    }
    else if (arr1ptr < arr2ptr)
    {
        answer.push(arr1[i]);
        i++;
    }
    else if (arr1ptr > arr2ptr)
    {
        answer.push(arr2[j]);
        j++;
    }
}

它的行數多於您的行數,但速度更快。 根據您使用的數組大小和編碼的難易程度,您可能需要使用它。

我不知道這是否真的使事情看起來更好或更易於理解,但是您可以

arr1.forEach(function(v, i){arr2.filter(function(v2){return v[0]==v2[0]}).forEach(function(v3){v3.slice(1).forEach(function(e){v.push(e)})})});

當然,這看起來更像是js。 ;)

我認為有太多不同的數據結構和用例,以致您無法真正從數據結構中得出常見的用例。 元素[0]在某種程度上很特殊,但這反映在您的代碼中,而不是數據結構中。

對於您認為很有趣的答案,是否可以重組數據? arr2 = { itemid-1: [ ... ], itemid-2: [ ... ] } 然后,您可以執行forEach循環,簡單的查找和concat: arr1[i].concat(arr2[v])嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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