簡體   English   中英

從一個范圍內的數組中獲取唯一值?

[英]Get unique values from array within a range?

我有一個數組,我需要返回范圍內的值(從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))

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

您可以使用Array.filter過濾符合條件的值。 然后轉換為Set for unique values,最后使用spread語法將其轉換回數組。

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

您可以使用Set Object獲取唯一值,並使用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對象允許您存儲任何類型的唯一值,無論是原始值還是對象引用。

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

您可以再次測試實際索引以排除更多相同的值

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM