我有一个JavaScript对象数组,看起来像
var myarr = [
{'xx':'2023-01-01,,1'},
{'ss':'2023-01-01,2,1.2'},
{'dd':'2023-01-01,4,'},
{'rr':'2023-01-01,,'},
{'ff':'2023-01-01,,'},
{'gg':'2023-01-01,,'}
];
这个数组实际上要比这个大得多,但是出于测试的目的,我将它缩小了,我的一些数组有数千行长
每个对象包含一个日期和两个逗号分隔的值,尽管我有一些行包含3或4个逗号分隔的值
我需要做的是,如果在任何行中发现任何空白逗号分隔值,则从该位置获取上一个逗号分隔值,最多返回2次,不过将来可能需要将其更改为更大的值
因此,对于我的示例,我将得到以下输出
var myarr = [
{'xx':'2023-01-01,,1.6'},
{'ss':'2023-01-01,2,1.2'},
{'dd':'2023-01-01,4,1.2'},
{'rr':'2023-01-01,4,1.2'},
{'ff':'2023-01-01,4,'},
{'gg':'2023-01-01,,'}
];
我试过用
var myarr = [
{'xx':'2023-01-01,,1'},
{'ss':'2023-01-01,2,1.2'},
{'dd':'2023-01-01,4,'},
{'rr':'2023-01-01,,'},
{'ff':'2023-01-01,,'},
{'gg':'2023-01-01,,'}
];
var maxAttempts = 3;
for (var i = 0; i < myarr.length; i++) {
var obj = myarr[i];
var values = Object.values(obj)[0].split(",");
var date = values[0];
var value1 = values[1];
var value2 = values[2];
for (var j = 1; j <= maxAttempts; j++) {
if (!value1) {
value1 = (myarr[i-j] && Object.values(myarr[i-j])[0].split(",")[1]) || " ";
}
if (!value2) {
value2 = (myarr[i-j] && Object.values(myarr[i-j])[0].split(",")[2]) || " ";
}
if (value1 && value2) {
break;
}
}
console.log(date, value1, value2);
for (var k = 3; k < values.length; k++) {
var value = values[k];
console.log(value);
}
}
但它似乎没有提供预期的输出。
有人能帮我解决一下可能出了什么问题吗?
3条答案
按热度按时间gz5pxeao1#
也许你可以用这个。
v440hwme2#
下面是我的尝试。这也适用于每行任意数量的值。
mklgxw1f3#
这种方法创建了一个包含最后几个条目的“window”数组,用于查找以前的列值。