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

Javascript map method on array of string elements

本文关键字:Javascript 映射 方法 元素 数组 字符串      更新时间:2023-09-26

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

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 方法语法的困惑。

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']

尝试这样的事情:

let str = 'hello';
let tab = [...str];
tab.map((x)=> {
    console.log("|"+x+"|");
    return x;
})

newArray 应该在 myArray 中包含所有项目的反向版本。之后,newArray 应该被反转并用空格连接,以获得输入字符串的反转版本。

这是代码:

function palindromeChecker(string) {
  var myString = string.toLowerCase();
  var myArray = myString.split(" ");
  var newArray = myArray.map(function (item) {
        return item.split("").reverse().join("");
    });
  console.log(newArray);
  return newArray.reverse().join(" ") === string;
}
console.log(palindromeChecker("dad did what"));
通过使用

split()函数对字符串元素数组的Javascript映射方法。

let str = 'hello';
      
    str.split('').map((x)=> {
        console.log("|"+x+"|");
        return x;
    })

Map 是 ES5 中可用的高阶函数。我认为您的newArray将包含布尔值数组。

本质上,map 将遍历数组中的每个值并应用该函数。返回值将是数组中的新值。您也可以使用map并将所需的信息保存在其他地方,当然忽略结果。

var arr = [1,2,3,4];
var newArray = arr.map(function(i) {
  return i * 2;
});
//newArray = [2,4,6,8]

javascript(几乎任何语言)中的map函数是一个很好的小函数,它允许你对列表中的每个项目调用一个函数,从而改变列表本身。作为参数传递的(匿名)函数接受参数本身,每次调用它时,该参数由它正在处理的列表项填充。

所以对于一个列表[1,2,3,4],函数 function(item) { return item + 1 } ,会给你一个结果[2,3,4,5]列表。传递给 $.map() 的函数将运行列表的每个元素,从而更改列表。

所以对于你的代码:在你作为参数传递给$.map()的函数中,你返回新旧数组是否相等(顺便说一句,这是错误的)。因此,由于您返回的是一个布尔值,因此您最终得到的列表是一个布尔值列表。我认为您要做的是从传递给$.map()的函数中提取newArray == myArray,并将其放在$.map()调用之后。然后在你传递给$.map()的函数中,返回你要拆分的项目等等,所以你的newArray将是一个字符串数组,如myArray

除了代码中的一些小错误,例如范围问题(您在定义它们的函数之外引用了"newArray"和"myArray",因此变得"未定义"

)。

您遇到的主要问题是您在 map 函数中解决了整个数组,而整个概念将事情分解为单个元素(然后该函数将所有内容收集回数组)。

我在示例中使用了"过滤器"函数,因为它以类似的方式工作,我觉得它可以做你想要的,但您可以将"过滤器"更改为"地图",看看发生了什么。

干杯:)

.HTML:

<body>
<p id="bla">
BLA
</p>
<p id="bla2">
BLA2
</p>
</body>

Javascript:

function palindromeChecker(string) {
  var myString = string.toLowerCase();
  var myArray = myString.split(" ");
  var newArray = myArray.filter(function (item) {
    var reversedItem = item.split('').reverse().join('');
    return  item == reversedItem;
});
document.getElementById("bla").innerHTML = myArray;
document.getElementById("bla2").innerHTML = newArray;
}
palindromeChecker("What pop did dad Drink today");

感谢您的输入,大家。这是我最终得到的代码。我修复了原始帖子中的范围问题。我的主要问题是理解地图方法的语法。特别是,我无法从其他在线资源中了解如何确定回调函数中的值。因此,在上面的大力帮助下,我将map方法放在回文检查器中,并在map函数中完成了数组的所有工作。

var palindromeChecker = function(string) {
var newString = string.toLowerCase().split(' ');
newString.map(function(item) {
  console.log(item.split('').reverse().join('') === item);
  });
}; 
palindromeChecker("What pop did dad drink today");
//Returns false, true, true, true, false, false