Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在某些数据为可选数据时使用数组映射_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 在某些数据为可选数据时使用数组映射

Javascript 在某些数据为可选数据时使用数组映射,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有一条JSON消息,其中包含作为http请求一部分的属性列表。我想预处理的一些对象属性。但是,它们不是所有必需的,在入站JSON中可能不存在 我的第一个想法是使用数组和“映射”方法应用预处理函数: function preprocess(event) { var build_map = [ {type: builder.concat, newPropertyName :"modified.URL", data: [event.site, event.slug]},

我有一条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.site,event.slug],看起来像:

var testEvent = {
firstName: "bob",
lastName: "smith",
email: "a@example.com"
};

这会导致错误,因为“event.site”未定义。我知道我可以创建一个引用对象或数组,在动态创建“build_map”数组之前循环检查每个属性是否在“event”集合中……但我想知道是否有更好的方法或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*/})