我正在尝试使用Javascript清理从文本文件解析的对象数组。通过SO的帮助,我的Google-fu和长时间的修补,我能够删除所有空值,从金额值中删除多余的字符,从金额和描述值中修剪额外的空格,并转换金额值为整数。所有这些都可以在下面的Plunker链接中正常工作。
var transferArray = [{
"transferCode": [
"23100"
],
"details": [
{
"voucherNumber": [
"0000047381",
"0000047427",
"0000047480",
"0000047494",
"0000047508",
"0000047516",
"0000047597",
"0000047608",
"0000047631",
"0000047646",
"0000047670",
"0000047675",
"0000047695"
],
"vendor": [
"Central Equatoria State",
"EASTERN EQUATORIA ST",
"JONGLEI STATE",
"Lakes State",
"Northern Bahr-el State",
"Unity State",
"Northern Bahr-el State",
"Western E State",
"Warap State",
"Greater Pibor Admin.Area",
"Upper Nile State",
"Western BG State"
],
"description": [
"1003-1500 Block Grant Oct ",
"1003-1501 Block Grant Oct ",
"1003-1503 Block Grant Oct ",
"1003-1504 Block Grant Oct ",
"1003-1505 Block Grant Oct ",
"1003-1506 Block Grant Oct ",
"1003-1505 Block Grant Oct ",
"1003-1508 Block Grant Oct ",
"1003-1511 Block Grant Oct ",
"1003-0926 Block Grant Sep ",
"1003-1507 Block Grant Oct ",
"1003-1509 Block Grant Oct 3,178,342.00\"\r "
],
"amount": [
"t 6,027,922.00",
"t 5,510,965.00",
"t 5,280,181.00",
"t 4,814,009.00",
"t 3,826,046.00",
"t 4,672,368.00",
"t 1,200,000.00",
"t 4,509,358.00",
"t 5,547,404.00",
"t 2,462,988.00",
"p 3,067,645.00",
"t 5,663,401.00",
"t 3,178,342.00"
]
}
]
},
{
"transferCode": [
"23201"
],
"details": [
{
"voucherNumber": [
"0000047585",
"0000047589",
"0000047601",
"0000047602",
"0000047604",
"0000047674",
"0000047690",
"0000047697",
"0000047725"
],
"vendor": [
"Central Equatoria State",
"EASTERN EQUATORIA ST",
"Northern Bahr-el State",
"Unity State",
"JONGLEI STATE",
"Western E State",
"Warap State",
"Upper Nile State",
"Western BG State"
],
"description": [
"1003-1552 Sal Tax Adj Gran Sep ",
"1003-1553 Sal Tax Adj Gran Sep ",
"1003-0048 Sal Tax Adj Gran Jul ",
"1003-1557 Sal Tax Adj Gran Sep ",
"1003-1554 Sal Tax Adj Gran Sep ",
"1003-1561 Sal Tax Adj Gran Sep ",
"1003-1559 Sal Tax Adj Gran Sep ",
"1003-1558 Sal Tax Adj Gran Oct ",
"1003-1560 Sal Tax Adj Gran Sep 1,375,683.00\"\r "
],
"amount": [
"p 9,039,784.00",
"p 3,774,442.00",
"l 741,962.00",
"p 890,633.00",
"p 3,968,445.00",
"p 996,638.00",
"p 1,779,481.00",
"t 3,102,814.00",
"p 1,375,683.00"
]
}
]
}]
function removeNulls(obj) {
var isArray = obj instanceof Array;
for(var k in obj) {
if(obj[k] === null) isArray ? obj.splice(k, 1) : delete obj[k];
else if (typeof obj[k] === "object") removeNulls(obj[k]);
}
}
removeNulls(transferArray);
console.log(JSON.stringify(transferArray, null, 2))
var cleanData = transferArray.map(function(e) {
cleanData = e.details.map(function(evt, err) {
for(i = 0; i < evt.amount.length; i++) {
evt.amount[i] = evt.amount[i].toString();
evt.amount[i] = evt.amount[i].replace(/^[a-zA-Z]\s+/g, '');
evt.amount[i] = parseFloat(evt.amount[i].replace(/\,/g, ""));
}
for(i = 0; i < evt.description.length; i++) {
evt.description[i] = evt.description[i].toString();
evt.description[i] = evt.description[i].trim();
}
return(evt)
})
return(e)
// console.log(evt.amount);
// console.log(evt.description);
});
console.log(transferArray);
http://plnkr.co/edit/Fy1jlV7KdNhWoPqvw4ng?p=preview
不幸的是,当我尝试将其合并到我的代码中时,它具有相同结构的更大对象数组,但它不起作用。删除了null和undefined值,但cleanData函数似乎无法正常工作。
我怀疑我的数据结构实际上与Plunker不同,但我真的看不出差异。我在下面提供了截图:
我很感激任何帮助或指导。我一直试图将这个问题包围了几天。
编辑:
我使用实际数据结构的示例更新了plunker和代码,因为它与我之前提供的示例略有不同。
答案 0 :(得分:0)
这将清除null
数量并将数字字符串转换为数字:
var transferArray = [{
"transferCode": 8675309,
"details": [
{
"voucherNumber": [34, 21],
"vendor": ["stan", "kyle"],
"description": ["blah ", "blah blah "],
"amount": ["t 45,555.00", "p 34,456.00"]
}
]
},
{
"transferCode": 45576543,
"details": [
{
"voucherNumber": [22, 57],
"vendor": ["Johnson", "Tyler"],
"description": ["trap music ", "The Wiz"],
"amount": [null, "r 77,564.00"]
}
]
}];
var clean = transferArray.map(function(transfer){
transfer.details = transfer.details.map(function(detail){
detail.amount = detail.amount.filter(function(quantity){
if(quantity !== null){
return true;
}
});
detail.amount = detail.amount.map(function(quantity){
var num = quantity.replace(/[^\d\.]+/g, '');
return Number(num);
});
return detail;
});
return transfer;
});
document.getElementById('results').innerHTML = JSON.stringify(clean, null, '\t');
<pre id="results"></pre>