带小数索引的JavaScript数组

mas*_*043 0 javascript arrays jquery

我有一个代码:

var arr = {"1":["val"],"1.5":["val"],"2":["val"],"2.5":["val"],"3":["val"]};

jQuery.each( arr, function( index, value ) {
    console.log(index + ':' + value)
});
Run Code Online (Sandbox Code Playgroud)

我需要显示数组中的每个元素,但我得到:

1:val
2:val
3:val
1.5:val
2.5:val
Run Code Online (Sandbox Code Playgroud)

但我需要以这种形式得到它:

1:val
1.5:val
2:val
2.5:val
3:val
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

T.J*_*der 5

那不是数组,它是一个非数组对象.非数组对象没有内在的顺序.*要对它们强加顺序,你得到键(属性名称),按顺序放置它们,然后遍历这些名称.像这样的东西:

var arr = {"1":["val"],"1.5":["val"],"2":["val"],"2.5":["val"],"3":["val"]};

jQuery.each( Object.keys(arr).sort(sortNumerically), function( index, name ) {
    console.log(name + ':' + arr[name])
});

// Somewhere reusable
function sortNumerically(a, b) {
    var anum = parseFloat(a),
        bnum = parseFloat(b);
    return anum - bnum;
}
Run Code Online (Sandbox Code Playgroud)

实例 | 资源

Object.keys是一个ES5函数,它为您提供一个对象的"自有"可枚举属性的名称数组,作为一个数组.(您可以在ES5之前的引擎上添加垫片.)对Array#sort阵列进行排序.(默认排序是lexigraphic,所以我放入了一个函数来进行数值比较.)然后我们遍历排序的数组,检查对象的属性.


(*就此而言,JavaScript的标准数组只按惯例排序,例如,数组索引的数字关系.除了引擎对它们进行优化时,它们不是真正的数组,也不是必须以数字顺序存储的条目.)