javascript - 在javascript中填充二维数组中的缺失值
问题描述
我有一个二维数组,其中包含值天和总计:
val:[['02', 14487.97 ],
[ '03', 28230.21 ],
[ '05', 58017.5 ],
[ '08', 79214.96 ]]
我需要用最后一天的值填充缺少的天数。例子:
final: [[ '02', 14487.97 ],
[ '03', 28230.21 ],
[ '04', 28230.21 ],
[ '05', 58017.5 ],
[ '06', 58017.5 ],
[ '07', 58017.5 ],
[ '08', 79214.96 ],
--编辑我做了下面的代码,但不确定它是否优化。
arr =[['02', 14487.97 ],
[ '03', 28230.21 ],
[ '05', 58017.5 ],
[ '08', 79214.96 ]]
function zeroPad(num, places) {
var zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
init=parseInt(arr[0][0])
end=parseInt(arr[arr.length-1][0])
for (var i=init; i<end; i++) {
try {
if(arr[i]) {
if (arr[i][0] != zeroPad(i+1, 2)) {
var item = [zeroPad(i+1, 2), arr[i-1][1]];
arr.splice(i, 0, item);
}
}
else {
var item = [zeroPad(i+1, 2), arr[i-1][1]];
arr.splice(i, 0, item);
}
}
catch (e) {
console.log(arr[i]);
console.log(e);
break;
}
}
console.log(arr);
最好的祝福
解决方案
减速器对这种事情很有用。这有效,并且不会更改原始数组(ES5 语法):
var val = [
["02", 14487.97],
["03", 28230.21],
["05", 58017.5],
["08", 79214.96]
];
// zeroPad function borrowed from Stack Overflow somewhere...
function zeroPad (size, num){
var s = num + "";
while (s.length < size) {s = "0" + s;}
return s;
};
function fillMissingRows (acc, row){
function num (r){return parseInt(r[0]);}
var prev = acc[acc.length - 1] || [];
for (var i = 1; i < num(row) - num(prev); i++) {
acc.push([zeroPad(2, num(prev) + i), prev[1]]);
}
acc.push(row);
return acc;
};
console.log(val.reduce(fillMissingRows,[]));
/*
[
[ '02', 14487.97 ],
[ '03', 28230.21 ],
[ '04', 28230.21 ],
[ '05', 58017.5 ],
[ '06', 58017.5 ],
[ '07', 58017.5 ],
[ '08', 79214.96 ]
]
*/
缩减函数fillMissingRows
依次获取 val 数组的每一行,并检查数组前一行的索引号与当前行之间是否存在间隙。如果有,它将前一行的适当数量的副本插入其结果 ( acc
) 中,其索引号增加并填充零,然后再插入当前行并移动到下一行。
有关 reduce 的详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce。
推荐阅读
- php - 如何使用 select2 和 Laravel 默认选择多个选项
- c - 从父进程获取结果后如何从子进程获取输入
- c++ - C++ 中的 While 循环结束,但不会继续执行其余语句
- python - 从熊猫数据框中的句子列表中删除标点符号
- java - 验证http get的返回值
- sql - 如何防止无效数据插入SQL
- python - 使用 numpy 加载数据文件时出现问题
- xamarin.forms - Xamarin.Forms / Xamarin.Android 的任何插件用于选择目录以保存文件?
- c# - 以自动方式满足条件后的实体框架更新字段
- java - 如何必须根据彼此排列列表