2015-10-12 90 views
0
arrayA = [ 
    ['10-01', "foo"], 
    ['10-02', "bar"], 
    ['10-03', "baz"] 
]; 

arrayB = [ 
    ['10-01', 1], 
    ['10-03', 3] 
]; 

arrayA是一個不重要的值的連續日期列表。jQuery:比較具有相同鍵和填充間隙的陣列

在arrayB中,我想填充缺失的日期('10 -02')來讀取「0」。因此,我想使用arrayA的鍵作爲映射(儘管兩者始於同一日期)。

則數組會讀

arrayB = [ 
    ['10-01', 1], 
    ['10-02', 0], 
    ['10-03', 3] 
]; 

我不知道如何:/

測試:https://jsfiddle.net/x37zor7y/1/

+0

什麼arrayB的值表示存在嗎? –

+0

arrayB的值是來自MySQL的計數值 – Martin

+0

1和3來自10-01和10-03的位置?不知道你實際上想要在這裏做什麼 –

回答

1

地圖兩個數組到一個新的組只用日期值陣列。

然後在連續一個環和填孔,如果值不已經在非連續陣列

var allDates = arrayA.map(function(subArr){ 
    return subArr[0]; 
}); 

var arrBDates = arrayB.map(function(subArr){ 
    return subArr[0]; 
}); 

allDates.forEach(function(dateVal){ 
    if(arrBDates.indexOf(dateVal) ==-1){ 
     arrayB.push([dateVal, 0]) 
    } 
}); 
// sort updated arrayB 
arrayB.sort(function(a,b){ 
    return a[0]>b[0] 
}); 

DEMO

+0

您之前的編輯作品:https://jsfiddle.net/x37zor7y/6/'arrayB.sort();'爲我做了訣竅 – Martin

1

你最快的方法是將數組轉換爲對象(如10-x是唯一的鍵),合併它們,並將它們轉換回來。這樣JavaScript引擎可以使用類似HashMap的東西來檢查是否存在,其複雜度大致從O(n^2)O(n)

var arrayA = [ 
 
     ['10-1', 'foo'], 
 
     ['10-2', 'bar'], 
 
     ['10-3', 'baz'] 
 
    ], 
 
    arrayB = [ 
 
     ['10-1', 1], 
 
     ['10-3', 3] 
 
    ]; 
 

 
function twodimensionalArrayToObject(array) { 
 
    return array.reduce(function(obj, entry) { 
 
    obj[entry[0]] = entry[1]; 
 
    return obj; 
 
    }, {}); 
 
} 
 

 
function objectToTwodimensionalArray(obj) { 
 
    return Object.keys(obj).map(function(key) { 
 
    return[key, obj[key]]; 
 
    }); 
 
} 
 

 
function extendWithZeros(obj1, obj2) { 
 
    for (var key in obj2) { 
 
    if (obj2.hasOwnProperty(key)) { 
 
     if (!obj1.hasOwnProperty(key)) { 
 
     obj1[key] = 0; 
 
     } 
 
    } 
 
    } 
 
    return obj1; 
 
} 
 

 
document.write(
 
    JSON.stringify(
 
    objectToTwodimensionalArray(
 
     extendWithZeros(
 
     twodimensionalArrayToObject(arrayB), 
 
     twodimensionalArrayToObject(arrayA) 
 
    ) 
 
    ) 
 
) 
 
);