Javascript 将数字从数组更改为百分比

Javascript 将数字从数组更改为百分比,javascript,Javascript,我想把数组中的数字改成百分比,但我不知道该怎么做 var nums = [84394, 78952, 65570, 58097, 55673, 41847, 24884, 16567, 9966, 1689]; 应该是: var results = [84, 78, 65, 58, 55, 41, 24, 16, 9, 1] 我的尝试: var nums=[84394、78952、65570、58097、55673、41847、24884、16567、9966、1689]; var结果=[

我想把数组中的数字改成百分比,但我不知道该怎么做

var nums = [84394, 78952, 65570, 58097, 55673, 41847, 24884, 16567, 9966, 1689];
应该是:

var results = [84, 78, 65, 58, 55, 41, 24, 16, 9, 1]
我的尝试:

var nums=[84394、78952、65570、58097、55673、41847、24884、16567、9966、1689];
var结果=[];
对于(变量i=0;i在和上读取

更好的方法(确定其自身的最大值)

var getNearestPowerOfTen = function (arr) {
    var max = arr.reduce(function (p, c) {
        // is the previous less than the current item?
        // if so, then return the current item
        // otherwise, return the previous item
        return p < c ? c : p;
    }, 0);
    // to find the next highest power of 10,
    // we should return 10 raised to the number of digits
    // in the integer part of our number
    return Math.pow(10, (max | 0).toString().length);
}

var convertToPercentages2 = function (arr) {
    var max = getNearestPowerOfTen(arr);
    return nums.map(function (d, i) {
        return (100 * d / max) | 0;
        // could be more efficient with just
        // `(d / max) | 0`, if you divide `max` by 100 above
    });
}
var getnearestpowerfactory=函数(arr){
var max=arr.reduce(函数(p,c){
//前一项是否小于当前项?
//如果是,则返回当前项目
//否则,返回上一项
返回p
更好的方法(因为我们正在做数学)

var getNearestPowerOfTen2=函数(arr){
var max=arr[0];
//for循环比'Array.prototype.reduce'快`
对于(变量i=1;i
这应该可以:

var nums = [84394, 78952, 65570, 58097, 55673, 41847, 24884, 16567, 9966, 1689];
var results = [];


for(var i = 0; i < nums.length; i++) {
  var divideBy = 0;
  if ( nums[i] < 10000 )
     divideBy = 100;
  else if ( nums[i] < 100000 )
     divideBy = 1000;
  else if ( nums[i] < 1000000 )
     divideBy = 10000;
  else if ( nums[i] < 10000000 )
     divideBy = 100000;
  else if ( nums[i] < 100000000 )
     divideBy = 1000000;
  var percentage = Math.floor(nums[i] / divideBy);

  results.push( percentage.toFixed(2) );
}

console.log(results);
var nums=[84394、78952、65570、58097、55673、41847、24884、16567、9966、1689];
var结果=[];
对于(变量i=0;i
用于(变量i=0;i
从您的问题(期望的结果)来看,您的所有数字似乎都是3个精度浮点乘以1000

如果希望根据下一个sig数字对结果进行四舍五入:

var nums=[84394、78952、65570、58097、55673、41847、24884、16567、9966、1689];
函数取整百分比(n){
返回(n/1000)。固定(0);
}
var roundedResults=nums.map(roundedPercents);

document.write(roundedResults.join(“,”)
如果你选择1000而不是100,结果就会出来。这与你刚才在本网站上询问的结果类似。@Zeeshan就在这里,你需要选择1000。“数组到百分比”是什么样的,所有数组元素的和还是一个常量之外的值?这是一个非常糟糕的方法来决定除以什么。如果我的号码是Math.pow(10,9)
,那该怎么办?避免只回答代码。添加一些关于您的解决方案的描述。
var getNearestPowerOfTen2 = function (arr) {
    var max = arr[0];
    // for-loop is faster than `Array.prototype.reduce`
    for (var i = 1; i < arr.length; i++) {
        if (max < arr[i]) max = arr[i];
    }
    return Math.pow(10, Math.ceil(Math.log10(max)));
}
var nums = [84394, 78952, 65570, 58097, 55673, 41847, 24884, 16567, 9966, 1689];
var results = [];


for(var i = 0; i < nums.length; i++) {
  var divideBy = 0;
  if ( nums[i] < 10000 )
     divideBy = 100;
  else if ( nums[i] < 100000 )
     divideBy = 1000;
  else if ( nums[i] < 1000000 )
     divideBy = 10000;
  else if ( nums[i] < 10000000 )
     divideBy = 100000;
  else if ( nums[i] < 100000000 )
     divideBy = 1000000;
  var percentage = Math.floor(nums[i] / divideBy);

  results.push( percentage.toFixed(2) );
}

console.log(results);
for(var i = 0; i < nums.length; i++) {

  var percentage = parseInt((nums[i] + '').slice(0,2));

  results.push( percentage );
}