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

Map array of values to a new array with a specific range

本文关键字:数组 范围 新数组 映射      更新时间:2023-09-26

在JavaScript中,我有一个值数组,如下所示:

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

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

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

有没有一种方法可以在原生JS中实现这一点?

有点卡住了:(感谢

如果你的意思是映射(用一个值交换另一个值(,那就是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);

要夹紧:

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));