当某些数据是可选的时使用数组映射

时间:2016-02-25 03:49:28

标签: javascript arrays node.js

我有一条JSON消息,其中包含属性列表,作为http请求的一部分。我想要预处理的一些对象属性。但是,它们并非都是必需的,并且在入站JSON中可能不存在。

我的第一个是使用数组和"地图"应用预处理功能的方法:

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"未定义。我知道我可以创建一个引用对象或数组,循环检查每个属性是否在" event"在动态创建" build_map"之前设置数组....但我想知道是否有更好的方法或内置的JavaScript我应该用来代替" map"或" forEach"。我假设有一些设计模式通常适用于这个问题。

1 个答案:

答案 0 :(得分:0)

由于这是一个理论问题,我将通过说明在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*/})