Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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_Function_Map_Filter_Functional Programming - Fatal编程技术网

JavaScript风格&;笨重的语法&;设计

JavaScript风格&;笨重的语法&;设计,javascript,function,map,filter,functional-programming,Javascript,Function,Map,Filter,Functional Programming,这些用JavaScript编写的函数中,哪一个更好?为什么 function getShortMessages(messages) { var filtered_messages = messages.filter(function(message) { if (message.message.length < 50){ return message.message; } }); var short_messages = filtered_messages

这些用JavaScript编写的函数中,哪一个更好?为什么

function getShortMessages(messages) {
  var filtered_messages = messages.filter(function(message) {
    if (message.message.length < 50){
     return message.message;
    }
});
  var short_messages = filtered_messages.map(function(message){
    return message.message;
  });
  return short_messages;
}
//My solution
函数getShortMessages(消息){
var filtered_messages=messages.filter(函数(消息){
如果(message.message.length<50){
返回消息.message;
}
});
var short_messages=筛选的_messages.map(函数(消息){
返回消息.message;
});
返回短消息;
}
//我的解决方案
在JavaScript中使用Array.prototype.filter()方法迭代数组,只保留少于50个字符的消息。消息是对象,您可以对消息项调用.message。我认为我的代码有副作用,不是很枯燥

function getShortMessages(messages) {
  return messages.filter(function(item) {
    return item.message.length < 50 }).map(function(item) {
      return item.message;
    });
}
// This is the other solution.
函数getShortMessages(消息){
返回消息。筛选器(函数(项){
return item.message.length<50}).map(函数(项){
返回item.message;
});
}
//这是另一个解决方案。

基本上我理解这个方法,它看起来更复杂和模糊。也许更抽象一些。我也不喜欢语法“}).map(“.”,因为我认为这很笨拙。

为什么要将实际的消息提取逻辑、测试逻辑(查看消息是否短)和检索短消息的逻辑耦合到一个函数中?如果是我,我可能会编写三个这样的函数

function isShortMessage(messageText) {
   return messageText && messageText.length < 50;
}

function extractMessageText(message) {
  return message && message.message;
}

function getShortMessages(messages) {
   return messages.map(extractMessageText).filter(isShortMessage);
}
函数isShortMessage(messageText){
返回messageText&&messageText.length<50;
}
函数extractMessageText(消息){
返回消息&&message.message;
}
函数getShortMessages(消息){
returnmessages.map(extractMessageText).filter(isShortMessage);
}

当然,如果您希望返回
消息
对象,可以修改
isShortMessage
函数以操作实际的消息对象,而不仅仅是文本,但您得到了一般的想法。

这取决于您缩进的方式,您可以以不同的形式编写后面的对象,并使用短变量,它会变得更简单国际海事组织