arrayA = [
['10-01', "foo"],
['10-02', "bar"],
['10-03', "baz"]
];
arrayB = [
['10-01', 1],
['10-03', 3]
];
arrayA是一个具有不重要值的连续日期列表。
在arrayB中,我想填写缺少的日期(' 10-02')以阅读" 0"。因此我想使用arrayA的键作为map(尽管两者都在同一天开始)。
然后数组将读取
arrayB = [
['10-01', 1],
['10-02', 0],
['10-03', 3]
];
我不知道如何:/
答案 0 :(得分: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)
)
)
)
);

答案 1 :(得分: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 强>