字符串元素数组上的 Javascript 映射方法
Javascript map method on array of string elements
我正在尝试了解如何实现 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
- 使用带有两个参数的函数的javascript映射
- 用javascript映射和匹配范围
- Javascript映射对象成员以返回新的扁平对象
- 角度和内置的javascript映射函数
- 接受多个数组作为参数的javascript映射函数
- 使用JavaScript映射reduce从数组中删除项
- 想要将数组存储为 JavaScript 映射中的值
- 如何在javascript映射中使用wordpress自定义字段变量
- 字符串元素数组上的 Javascript 映射方法
- 在进入javascript映射之前使用_c
- JavaScript映射不起作用
- 为什么javascript映射['10','10,'!10']的pars
- 多变量Javascript映射()回调
- Javascript映射数组循环
- 使用javascript映射键/值
- 使用JavaScript映射和减少JSON对象
- 非Javascript映射API服务
- 可以't在webview中加载页面后滚动javascript映射
- 从表单到javaScript映射
- 使用城市名称在地图上放置标记,而不是在javascript映射库中使用latin和Long