如何在具有未知属性的JavaScript中订购对象

时间:2017-05-19 17:36:16

标签: javascript

我需要创建按值排序的动态对象,但我不知道属性的名称,我试图使用_.sortby但是这不起作用,因为我不知道属性

初始对象:

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

3 个答案:

答案 0 :(得分:0)

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

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]

请注意,您无法排序对象键。这就是为什么上面的代码返回一个数组。

答案 1 :(得分: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);




答案 2 :(得分:0)

我认为你不能改变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 ,价值:o [e]};}));