当某些数据是可选的时,使用数组映射
using array map when some data is optional
我有一条JSON消息,其中包含作为http请求一部分的属性列表。其中一些对象属性我想预处理。但是,它们并非都是必需的,并且在入站 JSON 中可能不存在。
我的第一个方法是使用数组和"map"方法来应用预处理函数:
function preprocess(event) {
var build_map = [
{type: builder.concat, newPropertyName :"modified.URL", data: [event.site, event.slug]},
{type: builder.removeExtraSpaces, newPropertyName :"modified.name", data: [event.firstName, event.middleName, event.lastName]},
{type: builder.cleanEmail, newPropertyName :"modified.email", data: event.email}
];
build_map.map(function(item){
var type = item.type,
fieldName = item.fieldName,
data = item.data;
calc(type, fieldName, data, function(err, str){
//do stuff
})
});
}
但在某些情况下,入站事件不包含数组中设置的所有属性。 即使用上面的示例,"event"可能缺少[event.site,event.slug],如下所示:
var testEvent = {
firstName: "bob",
lastName: "smith",
email: "a@example.com"
};
这会导致错误,因为"event.site"未定义。 我知道我可以创建一个引用对象或数组,在动态创建"build_map"数组之前循环检查每个属性是否在"事件"集中......但我想知道是否有更好的方法或内置的 JavaScript 来代替"map"或"forEach"。 我假设有一些设计模式通常应用于这个问题。
由于这更像是一个理论问题,我会通过说以下在JS中处理数据的功能模式(React,Redux,Rx,Elm,Cycle等)来回答,因此将来不应该通过向数据添加事件来改变数据。
你应该在某个地方有一个函数,它接受输入(JSON 消息)并处理一个事件。
如果获取 JSON 并且必须像这样将事件绑定到它,请为这些事件构建一个单独的集合。这样,您就无法破坏消息的原始状态。真的很难为您的情况给出具体答案,因为我没有关于此事件对象的更多信息。例如:
//ES6 syntax
build_map
.map(x => Object.assign({},x)) //Create a copy
.map(x => {x.event = undefined; return x}) //set event so we dont crash
.forEach(x => { /*do stuff*/})
相关文章:
- 如何在映射数组中添加换行符
- 无法通过数组映射绑定
- 映射数组ES6时考虑空值
- 映射数组数组
- 在node.js或JavaScript中映射数组的干净方法
- 在angularjs中从逗号分隔的字符串列表中分割和映射数组
- Javascript映射数组循环
- GSON数组到json,但已映射数组
- 映射数组到对象的深度基于单独的对象
- Jquery映射数组键和值
- 映射数组的对象到映射分组的对象键js不可变
- 映射数组(列表),并添加一个属性
- 如何使用async.js映射数组
- 有可能只映射数组的一部分吗?(Array.map())
- 击倒映射数组与不同类型的视图模型
- 如何将哈希映射数组插入Redis?(Node.js)
- 映射数组中的属性,并在JavaScriptes6中连接一个字符串
- Javascript映射数组最后一项
- 从web方法映射数组值
- Javascript映射数组'fromCharCode'(字符)