2017-05-19 37 views
0

我需要创建按值排序的动态对象,但我不知道属性的名称,我尝试使用_.sortby,但这并不奏效,因为我不'知道物业如何在未知属性的JavaScript中订购对象

初始对象:

{ 
    134:0, 
    135:1, 
    136:2, 
    137:3, 
    138:4, 
    139:5, 
    140:15, 
    141:16, 
    142:17, 
    143:18, 
    144:19, 
    145:6, 
    146:7, 
    147:11, 
    148:12, 
    149:13, 
    150:14, 
    470:10, 
    471:20, 
    768:8, 
    769:9, 
    770:21, 
    771:22, 
    772:23, 
    773:24, 
    774:25 
} 

最终的对象必须是这样的:

{ 
    134:0, 
    135:1, 
    136:2, 
    137:3, 
    138:4, 
    139:5, 
    145:6, 
    146:7, 
    768:8, 
    769:9, 
    470:10, 
    147:11, 
    148:12, 
    149:13, 
    150:14, 
    140:15, 
    141:16, 
    142:17, 
    143:18, 
    144:19, 
    471:20, 
    770:21, 
    771:22, 
    772:23, 
    773:24, 
    774:25 
} 
+0

对象不具备除订单的中,他们被添加到对象。如果键实际上是数字,则使用数组或集合。 –

+0

如果您可以操纵您的回应,只需添加键并对其进行排序即可。 – funcoding

+1

排序对象属性的目的是什么?要找到它们的最大值? – MaxZoom

回答

0

您可能希望将对象键进行排序,然后将它们映射到他们的价值观:

var obj={134:0 135:1 136:2 137:3 138:4 139:5 140:15 141:16 142:17}; 

获取密钥后排序的值:

console.log(Object.keys(obj).sort().map(key=>obj[key]));//[0,1,2,3,4,5,15,16,17] 

请注意,你不能排序对象键。那为什么上面的代码返回一个数组。

+0

但我需要该物业的名称,价格仅用于订购 –

+0

@JavierGutierrez你不能! –

0

创建一个索引为对象属性值的数组,其值为属性名称。然后这个数组的顺序就是你想要的结果中的属性顺序。

var object = { 
 
    134:0, 
 
    135:1, 
 
    136:2, 
 
    137:3, 
 
    138:4, 
 
    139:5, 
 
    140:15, 
 
    141:16, 
 
    142:17, 
 
    143:18, 
 
    144:19, 
 
    145:6, 
 
    146:7, 
 
    147:11, 
 
    148:12, 
 
    149:13, 
 
    150:14, 
 
    470:10, 
 
    471:20, 
 
    768:8, 
 
    769:9, 
 
    770:21, 
 
    771:22, 
 
    772:23, 
 
    773:24, 
 
    774:25 
 
}; 
 

 
var array = []; 
 
for (var key in object) { 
 
    array[object[key]] = key; 
 
} 
 
var newObject = {}; 
 
array.forEach(function(el, i) { 
 
    newObject[el] = i; 
 
}); 
 

 
console.log(newObject);

0

我不认为你可以改变在JavaScript对象属性的顺序。
但你可以采取顺位被选它的价值和在阵列属性键和值存储他们:在JavaScript

var o = { 134:0, 135:1, 136:2, 137:3, 138:4, 139:5, 140:15, 141:16, 142:17, 143:18, 144:19, 145:6, 146:7, 147:11, 148:12, 149:13, 150:14, 470:10, 471:20, 768:8, 769:9, 770:21, 771:22, 772:23, 773:24, 774:25}; 
 

 
console.log(Object.keys(o).sort((a, b)=>{ return o[a]-o[b];}).map((e)=>{ return {key: e, value: o[e]};}));

+0

问题是这样的我有一个对象数组,我想要命令它导致每个属性是一个列,为了先秩序y使一个对象包含必要的命令这是最初的对象 初始{ 3:46 , 8时25分, 5点45分, 10:78, 面积: '区域' 状态: '状态' } 的第一个值是ID 但真正的顺序必须是这样的 \t模具{ \t \t 10:78, \t \t 3:46, \t \t 5:45, \t \t 8:25 \t} i之后知道真正的顺序我需要订购初始客体到 初始=模具; 初始{ 10:78, 3:46, 5:45, 8:25, 面积: '区域' 状态: '州' } –