Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为noUiSlider构建动态Javascript对象_Javascript_Jquery_Arrays_Object_Nouislider - Fatal编程技术网

为noUiSlider构建动态Javascript对象

为noUiSlider构建动态Javascript对象,javascript,jquery,arrays,object,nouislider,Javascript,Jquery,Arrays,Object,Nouislider,我正试图在JavaScript中为我的noUiSlider range属性动态构建一个对象。创建基于步长的范围滑块需要一个min和max值,两者之间的所有值都应该是项目总值的百分比。下面的示例将创建一个包含3个步骤(1、5和10)的范围滑块 range: { 'min': 1, '50%': 5, 'max': 10 } 我的数据如下: [ {width: "1"}, {width: "1.5"}, {width: "2"}, {width: "3"},

我正试图在
JavaScript
中为我的noUiSlider range属性动态构建一个对象。创建基于步长的范围滑块需要一个
min
max
值,两者之间的所有值都应该是项目总值的百分比。下面的示例将创建一个包含3个步骤(1、5和10)的范围滑块

range: {
    'min': 1,
    '50%': 5,
    'max': 10
}
我的数据如下:

[
  {width: "1"},
  {width: "1.5"},
  {width: "2"},
  {width: "3"},
  {width: "4"}
]
此数组可以是任意数量的
宽度
。对于传入的数据,我需要将其格式化为范围滑块接受的对象。类似于此:

{                       {
    '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
                        }
值必须包含一个
min
值作为第一项,一个
max
值作为最后一项。其余的键必须根据宽度数组中的项数以百分比的形式计算,值应该是数组的
width
value

我尝试用以下代码创建obj,但不知道如何将第一个和最后一个键值设置为
min
max

function toObject(arr) {
    var obj = {};
    for (var i = 0; i < arr.length; ++i)
        if (arr[i] !== undefined) obj[i*10] = arr[i];
    return obj;
}
函数对象(arr){
var obj={};
对于(变量i=0;i
迭代时检查其余元素如何:

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

你所展示的只是目标。。。但并没有人试图自己解决这个问题,也没有人试图解决任何与代码相关的问题。这不是一个免费的代码编写服务,这里的目标是帮助您修复代码抱歉,我已经更新了我的问题。我需要它在这个值{string:number}中,并且“min”必须是第一个,其中“max”是对象中的最后一个。@Romes若要获得一个数字作为值,您可以将该值包装在
parseInt(value,10)
中,如下所示:
parseInt(arr[i].width,10)
。就顺序而言,对象的顺序是不相关的,因为它提供了恒定的时间查找O(1)。换句话说,您将始终能够通过调用键来获得所需的值。
>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"}