如果我有一个看起来像的对象:
let object = {
name1 : {
number : .5,
otherVar : 'something'
},
name2 : {
number : .7,
otherVar : 'text'
},
name3 : {
number : -.1,
otherVar : 'some words'
}
};
我怎么能按数字值排序并得到一个数组:[name3,name1,name2]?
答案 0 :(得分:2)
这是一个班轮:
Object.keys(object).map(key => object[key]).sort((a, b) => a.number - b.number)
答案 1 :(得分:2)
let sorted = Object.keys(obj).map(key => obj[key]).sort((a, b) => a.number - b.number);
<强>解释强>
Object.keys(obj)
将返回一组键['name1', 'name2'...]
.map
会将该数组转换为值数组.sort
接受比较函数并返回已排序的数组(请参阅documentation)建议:不要调用您的对象object
:)
答案 2 :(得分:2)
这是另一个es6例子:
let object = {
name1 : {
number : .5,
otherVar : 'something'
},
name2 : {
number : .7,
otherVar : 'text'
},
name3 : {
number : -.1,
otherVar : 'some words'
}
};
let k = Object.keys(object).sort(((a, b) => object[a].number > object[b].number));
console.log(k);
答案 3 :(得分:1)
创建一个包含添加了名称的对象属性的数组:
var array = [];
for (var key in object) {
object[key].name = key;
array.push(object[key]);
}
然后按数字对该数组进行排序:
array.sort((a, b) => a.number - b.number);
然后从数组中获取名称:
var sortedNames = array.map(e => e.name);
完整演示:
let object = {
name1 : {
number : .5,
otherVar : 'something'
},
name2 : {
number : .7,
otherVar : 'text'
},
name3 : {
number : -.1,
otherVar : 'some words'
}
};
var array = [];
for (var key in object) {
object[key].name = key;
array.push(object[key]);
}
array.sort((a, b) => a.number - b.number);
var sortedNames = array.map(e => e.name);
console.log(sortedNames);
&#13;
答案 4 :(得分:0)
它应该做脏工作,首先你将对象平放到一个对象数组中,然后你创建自定义比较函数,最后排序,瞧!
var keys = Object.keys(object);
function compare(a,b) {
if (object[a].number < object[b].number)
return -1;
if (object[a].number > object[b].number)
return 1;
return 0;
}
var res = keys.sort(compare);
答案 5 :(得分:0)
var items = [];
items = JSON.parse(object);
}); //will give you an array
function compare(a,b) {
if (a.number < b.number)
return -1;
if (a.number > b.number)
return 1;
return 0;
}
items.sort(compare); //array will be sorted by number
&#13;