从范围内的数组中获取唯一值?
Get unique values from array within a range?
我有一个数组,我需要 return 新数组,其值在范围(从 a 到 b)内,但是!我想要 return 没有重复。我写了下面的脚本,但它不能正常工作。
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let newArr = [];
let funcFilter = function(arr, a, b) {
for(let i = 0; i< arr.length; i++) {
if(arr[i] >= a && arr[i] <= b ) {
if(arr.indexOf(arr[i]) !== -1)
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(funcFilter(arr, 3, 20))
您需要检查 newArr
中的值,因此 arr.indexOf(arr[i]) !== -1
需要更改为 newArr.indexOf(arr[i]) == -1
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let newArr = [];
let funcFilter = function(arr, a, b) {
for(let i = 0; i< arr.length; i++) {
if(arr[i] >= a && arr[i] <= b ) {
if(newArr.indexOf(arr[i]) == -1)
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(funcFilter(arr, 3, 20))
您可以使用Set
对象获取唯一值并使用filter()
过滤数组项;
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let funcFilter = (arr, start, end) => Array.from(new Set(arr))
.filter((v) => (v >= start && v <=end));
console.log(funcFilter(arr, 3, 20));
尝试 Set 因为
Set
object lets you store unique values of any type, whether
primitive values or object references.
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let newArr = [];
let funcFilter = function(arr, a, b) {
for(let i = 0; i< arr.length; i++) {
if(arr[i] >= a && arr[i] <= b ) {
if(arr.indexOf(arr[i]) !== -1)
newArr.push(arr[i]);
}
}
return [...new Set(newArr)];
}
console.log(funcFilter(arr, 3, 20))
您可以使用 Array.filter to filter the values that match the criteria. Then convert into Set for unique values and finally use spread syntax 将其转换回数组。
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let funcFilter = function(arr, a, b) {
return [...new Set(arr.filter(v => v >= a && v <= b))];
}
console.log(funcFilter(arr, 3, 20))
您可以再次测试实际索引以排除更多相同的值
if (arr.indexOf(arr[i]) === i) {
// ^
顺便说一句,您可以将 newArr
的声明移到函数内部。
var arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13],
funcFilter = function(arr, a, b) {
var newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= a && arr[i] <= b) {
if (arr.indexOf(arr[i]) === i) { // take only the first found item
newArr.push(arr[i]);
}
}
}
return newArr;
};
console.log(funcFilter(arr, 3, 20))
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
const uniqueValue = Array.from(new Set(arr));
function getValueInTherange(array, a, b) {
return array.filter(value => value >= a && value <= b - 1);
}
console.log(getValueInTherange(uniqueValue, 10, 50));
我有一个数组,我需要 return 新数组,其值在范围(从 a 到 b)内,但是!我想要 return 没有重复。我写了下面的脚本,但它不能正常工作。
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let newArr = [];
let funcFilter = function(arr, a, b) {
for(let i = 0; i< arr.length; i++) {
if(arr[i] >= a && arr[i] <= b ) {
if(arr.indexOf(arr[i]) !== -1)
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(funcFilter(arr, 3, 20))
您需要检查 newArr
中的值,因此 arr.indexOf(arr[i]) !== -1
需要更改为 newArr.indexOf(arr[i]) == -1
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let newArr = [];
let funcFilter = function(arr, a, b) {
for(let i = 0; i< arr.length; i++) {
if(arr[i] >= a && arr[i] <= b ) {
if(newArr.indexOf(arr[i]) == -1)
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(funcFilter(arr, 3, 20))
您可以使用Set
对象获取唯一值并使用filter()
过滤数组项;
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let funcFilter = (arr, start, end) => Array.from(new Set(arr))
.filter((v) => (v >= start && v <=end));
console.log(funcFilter(arr, 3, 20));
尝试 Set 因为
Set
object lets you store unique values of any type, whether primitive values or object references.
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let newArr = [];
let funcFilter = function(arr, a, b) {
for(let i = 0; i< arr.length; i++) {
if(arr[i] >= a && arr[i] <= b ) {
if(arr.indexOf(arr[i]) !== -1)
newArr.push(arr[i]);
}
}
return [...new Set(newArr)];
}
console.log(funcFilter(arr, 3, 20))
您可以使用 Array.filter to filter the values that match the criteria. Then convert into Set for unique values and finally use spread syntax 将其转换回数组。
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
let funcFilter = function(arr, a, b) {
return [...new Set(arr.filter(v => v >= a && v <= b))];
}
console.log(funcFilter(arr, 3, 20))
您可以再次测试实际索引以排除更多相同的值
if (arr.indexOf(arr[i]) === i) {
// ^
顺便说一句,您可以将 newArr
的声明移到函数内部。
var arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13],
funcFilter = function(arr, a, b) {
var newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= a && arr[i] <= b) {
if (arr.indexOf(arr[i]) === i) { // take only the first found item
newArr.push(arr[i]);
}
}
}
return newArr;
};
console.log(funcFilter(arr, 3, 20))
let arr = [3, 9, 10, 23, 100, 100, 23, 4, 10, 13, 13];
const uniqueValue = Array.from(new Set(arr));
function getValueInTherange(array, a, b) {
return array.filter(value => value >= a && value <= b - 1);
}
console.log(getValueInTherange(uniqueValue, 10, 50));