2017-04-11 62 views
0

我一直在學習範圍,也Object.keys和地圖,但我想知道如果這是可能的:總是想知道如何做這樣的事情。是否有一種簡單的方法來查找對象中的兩個值之間是否存在值?

{ 
    "zero": 0, 
    "ten": 10, 
    "twenty": 20, 
    "thirty": 30 
} 

鑑於0到30之間的數字,有沒有辦法來確定哪些兩個數字之在。。。之間?

例如,

Object.keys(range).map((v) => { 
    if (15 > range[v] && 6 < range[v+1]) { 
    // print out lower and upper 
    } 
}); 
+0

'map'返回一件事集合中的每一件事。如果你只是打印(或類似的東西),「forEach」可能是更好的選擇。 –

+0

爲什麼你要將'range'作爲非數組對象?屬性名稱不會添加任何有用的內容,並且假定任何「Object.keys」迭代對象屬性的順序是不好的做法。另外:你說的是一個號碼,但後來有兩個不同號碼(6和15)的代碼... – trincot

+0

請添加一些用例和想要的結果。 –

回答

2

它是不使用這樣一個好主意非數組對象範圍

  • 的屬性名稱不增加太多的對象
  • 在屬性名被重述,順序是a complex issue的意義,並在最好不要依賴。
更好

將使用數組,然後使用findfindIndex方法:

function getInterval(range, n) { 
 
    var i = range.findIndex(i => n < i); 
 
    if (i < 0) i = range.length; 
 
    // return an array with the two values that "bound" the value: 
 
    return [range[i-1], range[i]]; 
 
} 
 

 
var range = [0, 10, 20, 30]; 
 
// Examples: note that one value can be undefined, when outside of the range 
 
console.log('-2: ' + JSON.stringify(getInterval(range, -2))); 
 
console.log('6: ' + JSON.stringify(getInterval(range, 6))); 
 
console.log('15: ' + JSON.stringify(getInterval(range, 15))); 
 
console.log('31: ' + JSON.stringify(getInterval(range, 31)));

+0

問題仍不清楚,應該發生什麼... –

+0

@NinaScholz,我想這是對OP的評論? – trincot

1

你可以檢查的時間間隔和打印鍵。

var range = { zero: 0, ten: 10, twenty: 20, thirty: 30 }, 
 
    interval = [15, 25]; 
 

 
Object.keys(range).forEach(v => interval[0] < range[v] && range[v] < interval[1] && console.log(v));

一種不同的方法用單值的對象屬性的間隔

var range = { zero: 0, ten: 10, twenty: 20, thirty: 30 }, 
 
    value = 15; 
 

 
Object. 
 
    keys(range). 
 
    sort((a, b) => range[a] - range[b]). 
 
    forEach((k, i, kk) => (range[kk[i - 1]] <= value && value <= range[k] || range[k] <= value && value <= range[kk[ i + 1]]) && console.log(k));

相關問題