2017-09-24 87 views
0

我想建立一個對象爲我的noUiSlider範圍屬性動態JavaScript。創建基於步長的範圍滑塊需要一個min和一個max值,其間的所有值應該是項目總值的百分比。下面的例子將產生一系列滑塊與3個步驟,1,5,和10建立動態的Javascript對象爲noUiSlider

range: { 
    'min': 1, 
    '50%': 5, 
    'max': 10 
} 

我的數據來自於如下:

[ 
    {width: "1"}, 
    {width: "1.5"}, 
    {width: "2"}, 
    {width: "3"}, 
    {width: "4"} 
] 

這個陣列可以是任何數量的widths。使用我的傳入數據,我需要將其格式化爲我的範圍滑塊接受的對象。一些與此類似:

{      { 
    'min': 1,    'min': 1, 
    '25%': 1.5,    '16.66%': 1.5, 
    '50%': 2,  OR  '33.32%': 2, 
    '75%': 3,    '49.97%': 3, 
    'max': 4    '66.66%': 4, 
}       '83.32%': 5, 
          'max': 6 
         } 

key值必須包含一個min值作爲第一項和max值作爲最後一個項目。其餘的鍵必須根據寬度數組中的項目數以百分比計算,並且值將爲數組的值width

我試圖創建一個與下面的代碼obj的,但不知道如何在第一和最後的鍵值設置爲minmax

function toObject(arr) { 
    var obj = {}; 
    for (var i = 0; i < arr.length; ++i) 
     if (arr[i] !== undefined) obj[i*10] = arr[i]; 
    return obj; 
} 
+0

所有你已經證明是目標...但不是任何嘗試自己解決這個問題,或者真的有任何特定的代碼相關問題。這不是一個免費的代碼寫作服務,這裏的目標是幫助你修復**你的代碼** – charlietfl

+0

對不起,我已經更新了我的問題。 – Romes

回答

1

有關檢查剩餘的元素,你遍歷什麼:

function toObject(arr) { 
    var obj = {}; 
    for (var i = 0; i < arr.length; ++i) { 
     var remaining = arr.length - i; 
     if (arr[i] !== undefined) { 
      if (remaining == arr.length) { 
       obj['min'] = arr[i].width; 
      } 
      else if (remaining === 1) { 
       obj['max'] = arr[i].width; 
      } 
      else { 
       obj[(i*10).toString()] = arr[i].width; 
      } 
     } 
    } 
    return obj; 
} 

從控制檯的測試:

>var a = [ 
    {width: "1"}, 
    {width: "1.5"}, 
    {width: "2"}, 
    {width: "3"}, 
    {width: "4"} 
]; 
> 
>toObject(a) 
{10: "1.5", 20: "2", 30: "3", min: "1", max: "4"} 
+0

我需要它在這個值{string:number},並且'min'需要是第一個'max'在對象中最後的地方。 – Romes

+0

@Romes爲了得到一個數值,你可以像下面這樣將值包裝在'parseInt(value,10)'中:'parseInt(arr [i] .width,10)'。就順序而言,一個對象的順序是不相關的,因爲它提供了恆定的時間查找O(1)。換句話說,您將始終能夠通過調用密鑰來獲得所需的值。 – JacobIRR