JavaScript风格& Clunky Syntax&设计

时间:2014-10-28 05:51:45

标签: 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.map(function(message){
    return message.message;
  });
  return short_messages;
}
//My solution

使用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.

基本上我理解这种方法,看起来更复杂和混淆。也许更抽象。我也不喜欢语法“})。map(”。我认为这很笨重。

1 个答案:

答案 0 :(得分:0)

为什么要结合实际的消息提取逻辑,测试逻辑以查看消息是否短缺以及将短消息检索到一个函数的逻辑?如果是我,我可能会写三个这样的函数

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

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

function getShortMessages(messages) {
   return messages.map(extractMessageText).filter(isShortMessage);
}

当然,如果你想要返回message个对象,你可以修改你的isShortMessage函数来操作实际的消息对象,而不仅仅是文本,但你会得到一般的想法。