gpt4 book ai didi

javascript - 不同函数中具有相同名称的数组

转载 作者:行者123 更新时间:2023-12-02 16:06:53 26 4
gpt4 key购买 nike

我有两个数组在两个单独的函数中命名为相同的东西。我假设数组对于每个函数来说都是本地的,但是第一个函数中的一些值会弄乱另一个函数中的值。当我更改第二个函数中的数组名称时,它会起作用。如果你问我的话,似乎违背了范围。为什么我的第一个解决方案不起作用?

问题:让函数 LetterCountI(str) 接受传递的 str 参数并返回重复字母最多的第一个单词。例如:“今天,是有史以来最伟大的一天!”应该返回最大,因为它有 2 个 e(和 2 个 t)并且它出现在也有 2 个 e 之前。如果没有重复字母的单词,则返回 -1。单词将用空格分隔。

无效的解决方案:

function repeatCount(word) {
tmp = [];
for (var i = 0;i<word.length;i++) {
tmp.push(word.filter(function(value) {return value === word[i]}).length)
}
return Math.max.apply(Math,tmp);
}

function LetterCountI(str) {
tmp = [];
str = str.split(/[^A-Za-z]/).filter(function(value) {return value != "";});
for (var i = 0;i<str.length;i++) {
tmp.push(repeatCount(str[i].split("")));
}
console.log(tmp);
return str[tmp.indexOf(Math.max.apply(Math,tmp))];
}
console.log(LetterCountI("Today, is the greatest day ever!"));

非工作解决方案输出:

Array [ 2, 1, 2, 1 ] 
"Today"

工作解决方案:

function repeatCount(word) {
tmp = [];
for (var i = 0;i<word.length;i++) {
tmp.push(word.filter(function(value) {return value === word[i]}).length)
}
return Math.max.apply(Math,tmp);
}

function LetterCountI(str) {
count = [];
str = str.split(/[^A-Za-z]/).filter(function(value) {return value != "";});
for (var i = 0;i<str.length;i++) {
count.push(repeatCount(str[i].split("")));
}
console.log(count);
return str[count.indexOf(Math.max.apply(Math,count))];
}
console.log(LetterCountI("Today, is the greatest day ever!"));

工作解决方案输出:

Array [ 1, 1, 1, 2, 1, 2 ]
"greatest"

最佳答案

问题是因为您的 tmp 数组没有在函数中使用 var 关键字定义。不使用 var 关键字定义变量会使它们成为全局范围,因此一个变量会影响另一个变量。

要解决这个问题,请使用 var 关键字声明变量,然后它们将如您所期望的那样位于函数作用域内。

关于javascript - 不同函数中具有相同名称的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30635650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com