我有一个数组,我需要返回值范围从a到b的新数组!我想返回无重复。我在下面编写了脚本,但是无法正常工作。
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))
答案 0 :(得分:5)
Ypu需要检查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))
答案 1 :(得分:3)
您可以使用Array.filter来过滤符合条件的值。然后将其转换为Set以获取唯一值,最后使用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))
答案 2 :(得分:2)
您可以使用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));
答案 3 :(得分:1)
尝试使用Set,因为
Set
对象使您可以存储任何类型的唯一值,无论 基本值或对象引用。
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))
答案 4 :(得分:1)
您可以再次测试实际索引以排除更多相同值
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))
答案 5 :(得分:1)
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));