2017-09-24 39 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