JS如何获取数字数组并返回最大的可通过组合数字

时间:2018-12-22 22:13:30

标签: javascript sorting numbers

此问题已删除

3 个答案:

答案 0 :(得分:1)

将数字传递到函数中,将数字拆分为单个数字,转换为整数数组,按降序排序,然后将各项组合在一起以得出返回的数字。

let numbers =[9,0,1,43,81,21,20,91,32,53,473,850,801,100,219,581,12345,12345000,1010100,8001009100]

numbers.forEach(function(number){
  console.log(myFunction(number));
})
// gives 9,0,1,43,81,21,0,91,32,53,743,850,81,100,921,851,54321,54321000,1110000,9811000000


function myFunction(num) {
  let numArray= num.toString().split('');
  numArray.forEach(function(num){
    num = parseInt(num);
  })
  numArray.sort(function(a, b){return b - a});
  return numArray.join('');
}

答案 1 :(得分:1)

从一开始就有些偏离。您的函数采用整数作为参数。这意味着您不能只使用nums.sort(),因为整数没有sort()方法,而且因为您真正想做的是对单个数字进行排序。在javascript中,最方便的方法是将其转换为字符串,然后将其拆分为数字。

例如:

let n = 5713
let arr = n.toString().split('')

console.log(arr)

您现在可以对它进行排序。对其进行排序后,可以将其与join()放回一起,然后使用parseInt()将其重新变成数字:

let arr = ["7", "5", "3", "1"]
let str = arr.join('')
let n = parseInt(str)

console.log(n)

即使是字符串列表,也可以设置列表。像这样:

list.sort((a, b) => b - a) // the - will convert the strings to numbers for you

b-a将在a> b时返回负数,在a sort()回调所需要的,这是javascript中无处不在的模式。

最后,您可能会得到类似以下内容的信息:

function largestNumber(num) {
  let str = num.toString().split('')  // turn number into string and spilt into array
  .sort((a, b) => b - a)              // reverse sort
  .join('')                           // join back to a string

  return parseInt(str)                // return a number
  };

 console.log( largestNumber(5371))

答案 2 :(得分:0)

/*
E.g. if num is 23, the function should return 32.
E.g. if num is 9, the function should return 9.
E.g. if num is 581 the function should return 851.
The code that I have written is this;
*/
const sortFunc = (a, b) => { 
  if(a < b) return 1;
  if(a > b) return -1;
  return 0;
}

function largestNumber(num) {
  return (num).toString()
                .split('')
                .map(e => parseInt(e))
                .sort(sortFunc);
}

console.log(largestNumber(234));
console.log(largestNumber(184507609));