按自定义数字

时间:2017-03-28 18:04:16

标签: javascript arrays

我有一些数据集:

const dataset = [14, 50, 202, 208, 55];

我必须使用dataset创建一个新数组,如下所示:

const normalizedDataset = normalize(dataset, 5); // [15, 50, 200, 210, 55]

曾试图写一些功能来做到这一点,但不幸的是我没有大脑来解决这个问题。试过这样:

const normalize = (arr, n) => {  
  return arr.map(x => {
    const y = (x % n) > n / 2 ? x + (n - (x % n)) : (x % n);
    return y ? y : x;
  });
}
normalize(dataset, 5);

也许有人知道一些libs要做或者如何更新我自己的功能?

2 个答案:

答案 0 :(得分:1)

您可以使用map()和余下的%运算符,并基于n以及剩余的计算新数字。

const dataset = [14, 50, 202, 208, 55];

function normalize(data, n) {
  return data.map(function(e) {
    var m = e % n;
    if (m == 0) return e;
    else {
      if (m > n / 2) return e + (n - m)
      else return e - m
    }
  })
}

console.log(normalize(dataset, 5))

或者带有三元运算符的较短版本可能看起来像这样。

const dataset = [14, 50, 202, 208, 55];

const normalize = (data, n) => {
  return data.map(function(e) {
    var m = e % n;
    return (m != 0) ? (m > (n / 2) ? e + (n - m) : e - m) : e
  })
}

console.log(normalize(dataset, 5))

答案 1 :(得分:1)

我想这是最短的解决方案。



const dataset = [14, 50, 202, 208, 55];

function normalize(arr, n){
	return arr.map(function(e){
		return Math.round(e/n)*n;
	})
}

console.log(normalize(dataset, 5));