我的项目模块包含很多实践问题,从我选择并尝试解决的那个问题中,下面是问题。
给出一个数字数组,以产生最大值的方式排列它们。例如,如果 如果给定的数字为{54,546,548,60},则排列6054854654给出最大值。 输入: 第一行包含整数N,下一行包含N个由空格分隔的整数。 输出: 打印通过使用给定数字可获得的最大数字。 限制条件: 1 <= N <= 1000 1 <= Number <= 1000000
HTML:
Enter Number: <input type="text" id="userinput" class="clr"/> <br>
<br>
Largest Value: <input type="text" id="out" class="clr"/> <br> <br>
Javascript:
function myFun() {
let b = document.getElementById("userinput").value;
let c = b.split(" ");
var maxCombine = (a) => +(a((x, y) => +("" + y + x) - +("" + x + y)).join(''));
document.getElementById("out").value = ([
c
].map(a));
};
在运行脚本时出现错误的声明变量错误。请给个建议。
错误:
Uncaught ReferenceError: a is not defined
at myFun (lagnum.html:26)
at HTMLButtonElement.onclick
答案 0 :(得分:5)
在您的代码中,您错过了两件事,请检查以下几点。
i)在分割了要合并的值之后,却忘记了对值进行排序以找到最大的值 ii)在映射输出时,您调用了错误的变量
请检查以下代码,
function myFun() {
let b = document.getElementById("userinput").value;
let c = b.split(" ");
var maxCombine = (a) => +(a.sort((x, y) => +("" + y + x) - +("" + x + y)).join(''));
document.getElementById("out").value = ([
c
].map(maxCombine));
};
答案 1 :(得分:0)
这里有一些小的变化是工作示例:
function myFun() {
let b = document.getElementById("userinput").value;
let c = b.split(",");
var maxCombine = (a) => +(a.sort((x, y) => +("" + y + x) - +("" + x + y)).join(''));
document.getElementById("out").value = ([
c
].map(maxCombine));
};
Enter Number: <input type="text" onfocusout="myFun()"; id="userinput" class="clr"/> <br>
<br>
Largest Value: <input type="text" id="out" class="clr"/> <br> <br>
答案 2 :(得分:0)
与String#localeCompare
一起使用sort是另一种方法。
不需要将拆分的项目转换为字符串,因为使用String#split
之后,您将获得一个字符串数组。
var string = '54 546 548 60 80 8';
console.log(
string
.split(' ')
.sort((a, b) => (b + a).localeCompare(a + b)).join(' ')
);