从给定数组中找到最大值或最大值

时间:2018-09-29 11:25:30

标签: javascript

我的项目模块包含很多实践问题,从我选择并尝试解决的那个问题中,下面是问题。

给出一个数字数组,以产生最大值的方式排列它们。例如,如果 如果给定的数字为{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

3 个答案:

答案 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(' ')
);