我知道当索引已经存在时如何在索引处插入数组。说arr = [1, 2, 3, 4]
和arr.splice(2, 0, 0)
会产生[1, 2, 0, 3, 4]
。但是我有一个空数组,它从一个没有任何特定顺序的对象中填充。实际上,数组用于对对象进行排序:
var key = parseInt(object[object_key].timestamp);
while (key && array_sorted[key]) { //Attempt at preventing overwriting elements with same timestamp
key++;
}
key = key ? key : array_sorted.length + 1;
array_sorted.splice(key, 0, object[object_key].data);
现在这将构建一个数组[object[0].timestamp, object[1].timestamp, object[2].timestamp, ...]
而不是像[undefined, ..., undefined, object[4].timestamp, object[3].timestamp, undefined, object[0].timestamp, undefined, ..., undefined, object[1].timestamp]
这样的东西...我怎么能用timestamp
(对象的对象的属性)来实现对象对象的排序方法?有没有办法在空数组的索引处插入?
答案 0 :(得分:1)
我不会具体说明,但下面给出的例子可以帮助您解决问题。
我们说
var objArray=[{"Name":"Anand"},{"Name":"Jhon"},{"Name":"Paul"}];
现在你可以像
那样排序objArray.sort(function(a, b) {
var textA = a.Name.toUpperCase();
var textB = b.Name.toUpperCase():;
return (textA < textB) ? 1 : (textA > textB) ? -1 : 0;
//return (textA < textB) ? -1 : (textA > textB) ? 1 : 0; //for ascending.
});
现在您将找到已排序的数组。
答案 1 :(得分:1)
不确定我是否正确理解了您的问题。实际上我可以看到几个问题,我会尝试回答它们:
排序对象
您无法对对象进行排序,但您可以创建一个包含对象属性键的数组或按某些条件排序的值。
var object = {
a: {
timestamp: 1385127590866
},
c: {
timestamp: 1385127590872
},
b: {
timestamp: 1385127590877
}
},
keys = Object.keys(object), // Get object properties as array
sortedByKeys = keys.sort(function(key0, key1) { // ['a', 'b', 'c']
if(key0 < key1) return -1;
if(key1 > key0) return 1;
return 0;
}),
sortedByTimestamp = keys.sort(function(key0, key1) { // ['a', 'c', 'b']
return object[key1] - object[key0];
}),
sortedValues = [], i, j;
for(i=0, l=sortedByTimestamp.length; i<l; i++) { // [{timestamp:1385127590866}, {timestamp:1385127590872}, {timestamp:1385127590877}]
sortedValues.push(object[sortedByTimestamp[i]]);
}
在特定索引
创建空数组的地方项目var array = Array(Object.keys().length); // [undefined, undefined, undefined]
array[1] = object['a']; // [undefined, {timestamp:1385127590866}, undefined]
希望它会有所帮助。
答案 2 :(得分:1)
要回答实际问题,Javascript中的对象不保证任何订单。
要从object of objects
获取您想要的基于订单的行为,您确实需要将其转换为array of objects
。然后,您可以根据Anand的建议使用sort
方法对其进行排序。
或者你可以随意排序:
var objects = {
1:{timestamp:"12345"},
2:{timestamp:"34567"},
3:{timestamp:"23456"}
}
var array = [];
for(var i in objects){
var timestamp = parseInt(objects[i].timestamp);
var added = false;
for(var j in array){
if(timestamp > parseInt(array[j].timestamp)){
array.splice(j + 1, 0, objects[i]);
added = true;
break;
}
}
if (!added) {
array.unshift(objects[i]);
}
}