将值数组映射到具有特定范围的新数组

时间:2016-08-05 14:05:51

标签: javascript

在JavaScript中,我有一组这样的值:

var values = [3452,1234,200,783,77]

我需要做的是将这些值映射到一个新数组,其值应该在10到90之间。

var new_values = [12,48,67,78,90]

有没有办法在原生JS中实现这个目标?

有点卡住:( 感谢

2 个答案:

答案 0 :(得分:3)

如果你的意思是 map (为另一个值换一个值),那就是Array#map

var new_array = array.map(function(value) {
    return /*...calculation on value...*/;
});

它将使用数组中的每个值调用您的回调,并根据它返回的值构建一个新数组。 (道歉,我无法弄清楚3452如何变成12,1234变成48等等)

例如,这会加倍:

var array = [1, 2, 3, 4];
var new_array = array.map(function(value) {
  return value * 2;
});
console.log(new_array);

如果您指的是过滤器(仅保留范围内的值),则为Array#filter

var new_array = array.filter(function(value) {
    return value >= 10 && value <= 90;
});

它将使用数组中的每个值调用您的回调,并仅使用返回truthy值的值构建一个新数组。我将“10到90之间”解释为包含10和90。

示例:

var array = [3452,1234,200,783,77];
var new_array = array.filter(function(value) {
    return value >= 10 && value <= 90;
});
console.log(new_array);

在ES2015(又名“ES6”)及以上版本中,可以更简洁:

let new_array = array.map(value => /*...calculation on value...*/);

let new_array = array.filter(value => value >= 10 && value <= 90);

答案 1 :(得分:0)

要钳制:

var new_values = [3452,1234,200,783,77].map(n => Math.Min(10, Math.max(n, 90)));

过滤:

var new_values = [3452,1234,200,783,77].filter(n => 10 < n && n < 90));