2017-02-14 47 views
2

我有钥匙阵列,可能是无论是实际的字符串检查数组键是数字

var array = { 
    'Blue' : 1, 
    'Red' : 2, 
    'Green': 3 
} 

,或者它可以是数字,但有时彩车视为字符串,我猜是因为它不是一个数组,但一个对象:

var array = { 
    9  : 1, 
    '9.5' : 2, 
    10 : 3 
    '10.5': 4 
} 

这个人是不是一个真正的数组,所以我需要在明确排序呢,如果我想保持原来的顺序:

$.each(Object.keys(array).sort(function(a, b) { 
    var anum = parseFloat(a), 
     bnum = parseFloat(b); 
    return anum - bnum; 
}), function(index, value) { 
    …… 
}); 

,如果我不这样做,我的数组是:

var array = { 
    9  : 1, 
    10 : 3, 
    '9.5' : 2 
    '10.5': 4 
} 

我需要保持它排序。我的解决方案运行良好,但我需要检查键是数字还是字符串。如果它们是字符串,我不需要对数组进行排序。喜欢的东西:

$.each(/*if my array has numbers as keys I sort the array as above, else just loop*/, 
function(index, value) { 
    …… 
}); 
+0

您可以使用'''typeof运算指数=== “字符串”''' –

+0

你不能。 [这是原因和讨论](http://stackoverflow.com/questions/3633362/is-there-anyway-to-use-a-numeric-type-as-an-object-key) –

+1

对象不必须保持物业的秩序! –

回答

5

确实不应该调用该对象 '数组',而是:

if(Object.keys(array).every(key => !isNaN(key)){ //sort } 
+2

在上下文中:https://jsfiddle.net/ba55pkuh/ – blex