数据清理 JavaScript 对象
data cleansing javascript objects
我有一个内置的http服务器node.js和'connect'。 Web 服务当前将 JSON 请求解析为对象,执行"stuff",并返回同步响应。 JSON来自电子商务购物车,我最终得到了一个看起来像(删节版)的对象:
var myObj = {"request":{"industry":"social","transactionId":"gdfs23s","billing": {"addressLine1":"911 Fallen Street","addressLine2":"1 2"},"shipping":{"addressLine1":"1523 Willow Tree LAne","addressLine2":"unit 15"}}}
我想清理数据,执行诸如删除多余的空格、规范化邮政缩写(即街道到街等)等任务。
我写了一系列正则表达式,成功地实现了清理/规范化。
但是,我不确定如何有效地执行此操作并将这些清理过程优雅地应用于 JS/Node.js 中的对象。 我将遇到想要使用相同的正则表达式模式清理request.billing.addressLine1,request.shipping.addressLine1
的情况我当然可以做这样的事情: var addressCleaner= new RegExp("( str|街道|strt)","g"); myObj.request.billing.addressLine1.replace(addressCleaner, "st"); myObj.request.shipping.addressLine1.replace(addressCleaner, "st");
但我不觉得这是非常干燥的,而且它不是非常"节点"地完成的。
有什么建议或示例方法吗? 我想避免使用像 Mongoose 等这样的包来做到这一点,因为我正在做的规范化类型不仅包括确保字符串是字符串等。
提前谢谢。
因此,我建议对所有规范化器进行哈希处理,并单独拥有一个属性列表,这需要规范化。要在这里有想法,请编写一些代码:
var Normalizers = {
// -> function
trim: function(str) { return str.trim(); },
// -> array [RegExp, StringToReplace]
street: [ /(str|street)/g, 'st']
//...
};
var properties = {
'request.billing.addressLine1': ['trim', 'street'],
// ..
};
obj_normalize(myObj, properties, Normalizers);
我移动到要点obj_normalize/obj_getProprety/obj_setProperty
的代码。
如果您的正则表达式适用于对象中找到的每个字符串,您可以简单地递归对象并将正则表达式应用于每个字符串。
通用对象遍历函数对于这样的事情非常有用:
function object_traverse (name,obj,fn) {
obj = fn(name,obj);
if (obj instanceof Array) {
for (var n=0;n<obj.length;n++) {
obj[n] = object_traverse(n,obj[n],fn);
}
}
else if (typeof obj != "string" && typeof obj != "number") {
for (var n in obj) {
obj[n] = object_traverse(n,obj[n],fn);
}
}
return obj;
}
现在您可以执行此操作:
myObj = object_traverse('',myObj,function(name,obj){
if (typeof obj == "string" && name.match(/address/i)) {
obj = obj.replace(addressCleaner, "st");
}
return obj;
});
我会有一个从 JSON 文件构建的模型,并根据需要对其进行序列化。这将避免匹配或搜索源中可能存在的属性。一些例子:
function makeAddress(rawAddress) {
return { street: rawAddress["str"] ||
rawAddress["street"] ||
rawAddress["strt"],
. . . };
例如,配备此函数后,您就有了一个"地址"对象的数组,然后转换它们将是:
addresses.map(makeAddress);
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值