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

Min*_*rey 11 javascript arrays dictionary

我试图了解如何实现map方法(而不是使用for循环)来检查字符串的palindromes并返回布尔值,以确定映射的数组元素是否与原始数组元素相同.我似乎无法理解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"));
Run Code Online (Sandbox Code Playgroud)

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

这里有一个相关的问题:

Javascript数组映射方法回调参数

但是当使用它来对字符串数组执行函数时,它并没有回答我对map方法语法的困惑.

too*_*cts 10

map方法将字面上的"映射"函数调用到数组中的每个元素,将其作为将数组中每个整数的值增加1的简单示例:

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

// returns [2,3,4]
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你试图使用map接受或拒绝一个字符串,如果它是一个回文,所以一个简单的实现可能是:

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

// returns [true, true, false]
Run Code Online (Sandbox Code Playgroud)

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

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

// returns ['mum', dad']
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你首先拆分一个字符串来获取你的字符数组; 您可能还希望将该字符串设置为小写并删除标点符号,因此实现可能是:

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']
Run Code Online (Sandbox Code Playgroud)

正如您在问题的其中一条评论中所提到的,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;
}
Run Code Online (Sandbox Code Playgroud)

你会用它来称呼它:

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

  • 谢谢@toomanyredirects。这真的很有帮助。我同意过滤器函数在大多数情况下更为实用,但是我实际上只是在尝试学习如何将map方法与带有字符串元素的数组一起使用。非常感谢您的认真回答! (2认同)

小智 9

尝试这样的事情:

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

tab.map((x)=> {
    console.log("|"+x+"|");
    return x;
})
Run Code Online (Sandbox Code Playgroud)