字符串元素数组上的Javascript映射方法

新手上路,请多包涵

我试图了解如何实现 map 方法(而不是使用 for 循环)来检查字符串中的回文并返回布尔值以判断反转后的映射数组元素是否与原始数组元素相同。我似乎无法理解 map 方法的语法。如何让映射对原始数组中的每个元素起作用?价值是多少?这是我的工作代码,它只记录一个未定义的值:

 function palindromeChecker(string) {
    var myString = string.toLowerCase();
    var myArray = myString.split(" ");
    var newArray = myArray.map(function (item) {
        item.split("").reverse().join("");
        return newArray === myArray;
    });
}

console.log(palindromeChecker("What pop did dad Drink today"));

这是小提琴的链接: https ://jsfiddle.net/minditorrey/3s6uqxrh/1/

这里有一个相关的问题:

Javascript数组映射方法回调参数

但它并没有回答我在使用 map 方法对字符串数组执行函数时对语法的困惑。

原文由 Mindi Torrey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 259
2 个回答

map 方法将逐字地“映射”一个函数调用到数组中的每个元素,将此作为将数组中每个整数的值增加 1 的简单示例:

 var items = [1,2,3];
items.map(function(item) {
  return item + 1;
});

// returns [2,3,4]

在您的情况下,您正在尝试使用 map 来接受或拒绝字符串(如果它是回文),因此一个简单的实现可能是:

 var items = ['mum', 'dad', 'brother'];
items.map(function(item) {
  return item.split('').reverse().join('') === item;
});

// returns [true, true, false]

我不是 100% 确定你使用 map 的原因,因为如果你只是想过滤数组并删除不是回文的字符串,你应该使用 filter 方法,它以相同的方式工作,但会删除任何返回 false 的内容:

 var items = ['mum', 'dad', 'brother'];
items.filter(function(item) {
  return item.split('').reverse().join('') === item;
});

// returns ['mum', dad']

在您的情况下,您首先要拆分一个字符串以获取您的字符数组;您可能还想使该字符串小写并删除标点符号,因此实现可能是:

 var string = 'I live at home with my Mum, my Dad and my Brother!';
var items = string.toLowerCase().replace(/[^a-z0-9-\s]+/, '').split(' ');
items.filter(function(item) {
  return item.split('').reverse().join('') === item;
});

// returns ['i', 'mum', dad']

正如对您的问题的评论之一所述,如果您使用单独的函数来执行检查,则需要确保您 return 函数中的值,因此这就是您的函数的外观:

 function checkPalindromes(string) {
  var items = string.toLowerCase().replace(/[^a-z0-9-\s]+/, '').split(' ');
  items.filter(function(item) {
    return item.split('').reverse().join('') === item;
  });

  return items;
}

您可以使用以下方式调用它:

 checkPalindromes('I live at home with my Mum, my Dad and my Brother!'); // ['i', 'mum', 'dad']

原文由 toomanyredirects 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试这样的事情:

 let str = 'hello';
let tab = [...str];

tab.map((x)=> {
    console.log("|"+x+"|");
    return x;
})

原文由 marqn 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题