您对javascript的了解非常有限且基本。基本上下面是我将提示弹出窗口,显示值的答案。事情是我在下面找到的编码,如果我必须插入一个数组,让我们说1,2,3,2
输出将是,
,因为它在数组中出现的次数最多。有没有办法编辑此代码,以便上面输入的答案为2
我做了相当多的研究:
以下是链接:
代码:
<script type="text/javascript">
function evaluate() {
var input = prompt("Please enter your input");
var array = new Array();
function mode(array)
{
if(array.length == 0)
return null;
var modeMap = {};
var maxEl = array[0], maxCount = 1;
for(var i = 0; i < array.length; i++)
{
var el = array[i];
if(modeMap[el] == null)
modeMap[el] = 1;
else
modeMap[el]++;
if(modeMap[el] > maxCount)
{
maxEl = el;
maxCount = modeMap[el];
}
}
return maxEl;
}
document.writeln("Your calculation is: ");
document.writeln(mode(input) + " with a starting input string of: " + input);
}
</script>
<script type="text/javascript">
evaluate();
</script>
答案 0 :(得分:1)
您希望首先将字符串'1,2,3,2'
转换为数组[ 1, 2, 3, 2 ]
。这可以使用split
函数完成。您可能还希望trim
每个元素,以防有人用空格格式化它们。
function evaluate() {
const input = prompt("Please enter the array of integers")
.split(',')
.map(item => item.trim());
function mode(items) {
const counts = items
.reduce((counts, item) => {
const currentItemCount = counts.get(item) || 0;
return counts.set(item, currentItemCount + 1);
}, new Map());
const maxEntry = Array.from(counts.entries())
.reduce((maxEntry, entry) => {
return entry[1] > maxEntry[1] ? entry : maxEntry;
});
return maxEntry[0];
}
document.writeln("Your calculation is: ");
document.writeln(mode(input) + " with a starting input string of: " + input);
}
evaluate();
&#13;
答案 1 :(得分:1)
您的问题源于这样一个事实,即您永远不会将输入(从prompt
收到的字符串)转换为实际数组。
当直接在字符串上调用mode
时,逗号返回最常见,因为逗号是字符串中最常见的字符。
要解决此问题,您需要将字符串转换为实际数组,以便对数组的元素而不是字符串的字符进行操作。
您可以使用split
函数将逗号分隔的字符串("1,2,3,2"
)拆分为数组(["1", "2", "3", "2"]
),然后将其传递给模式函数:
mode(input.split(","))