使用javascript对对象的内容进行排序
如果我有一个对象看起来像:使用javascript对对象的内容进行排序,javascript,Javascript,如果我有一个对象看起来像: let object = { name1 : { number : .5, otherVar : 'something' }, name2 : { number : .7, otherVar : 'text' }, name3 : { number : -.1, otherVar : 'some words' } }; 我怎样才能按数值排序并得到一个数组:[name3,name1,name2]
let object = {
name1 : {
number : .5,
otherVar : 'something'
},
name2 : {
number : .7,
otherVar : 'text'
},
name3 : {
number : -.1,
otherVar : 'some words'
}
};
我怎样才能按数值排序并得到一个数组:[name3,name1,name2]?它应该做些脏活,首先将对象平铺成一个对象数组,然后创建自定义比较函数,最后排序,瞧
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);
var-keys=Object.keys(对象);
功能比较(a、b){
if(对象[a]。编号<对象[b]。编号)
返回-1;
if(对象[a].number>对象[b].number)
返回1;
返回0;
}
var res=keys.sort(比较);
它应该做一些不必要的工作,首先将对象平铺成一个对象数组,然后创建自定义比较函数,最后排序,瞧
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);
var-keys=Object.keys(对象);
功能比较(a、b){
if(对象[a]。编号<对象[b]。编号)
返回-1;
if(对象[a].number>对象[b].number)
返回1;
返回0;
}
var res=keys.sort(比较);
这是一条单行线:
Object.keys(object).map(key => object[key]).sort((a, b) => a.number - b.number)
这是一条单行线:
Object.keys(object).map(key => object[key]).sort((a, b) => a.number - b.number)
let sorted=Object.keys(obj).map(key=>obj[key]).sort((a,b)=>a.number-b.number)代码>
说明:
Object.keys(obj)
将返回一个键数组['name1'、'name2'…]
.map
将该数组转换为值数组
.sort
采用比较函数并返回排序后的数组(请参阅)
建议:不要调用您的对象object
:)让sorted=object.keys(obj).map(key=>obj[key]).sort((a,b)=>a.number-b.number)代码>
说明:
Object.keys(obj)
将返回一个键数组['name1'、'name2'…]
.map
将该数组转换为值数组
.sort
采用比较函数并返回排序后的数组(请参阅)
建议:不要调用对象对象:)
var项目=[];
items=JSON.parse(对象);
}); //会给你一个数组
功能比较(a、b){
如果(a.编号b.编号)
返回1;
返回0;
}
项目。排序(比较)//数组将按数字排序
var项目=[];
items=JSON.parse(对象);
}); //会给你一个数组
功能比较(a、b){
如果(a.编号b.编号)
返回1;
返回0;
}
项目。排序(比较)//数组将按编号排序
创建一个包含对象属性的数组,并将名称添加到其中:
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对象={
名称1:{
编号:.5,
otherVar:“某物”
},
名称2:{
编号:.7,
otherVar:'文本'
},
名称3:{
编号:-.1,
otherVar:“一些词”
}
};
var数组=[];
for(对象中的变量键){
对象[键]。名称=键;
array.push(对象[key]);
}
array.sort((a,b)=>a.number-b.number);
var sortedNames=array.map(e=>e.name);
控制台日志(分类名称)代码>创建一个数组,该数组包含添加了名称的对象属性:
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对象={
名称1:{
编号:.5,
otherVar:“某物”
},
名称2:{
编号:.7,
otherVar:'文本'
},
名称3:{
编号:-.1,
otherVar:“一些词”
}
};
var数组=[];
for(对象中的变量键){
对象[键]。名称=键;
array.push(对象[key]);
}
array.sort((a,b)=>a.number-b.number);
var sortedNames=array.map(e=>e.name);
控制台日志(分类名称)代码>这里是另一个es6示例:
let对象={
名称1:{
编号:.5,
otherVar:“某物”
},
名称2:{
编号:.7,
otherVar:'文本'
},
名称3:{
编号:-.1,
otherVar:“一些词”
}
};
设k=Object.keys(Object.sort)((a,b)=>Object[a].number>Object[b].number));
控制台日志(k)代码>这里是另一个es6示例:
let对象={
名称1:{
编号:.5,
otherVar:“某物”
},
名称2:{
编号:.7,
otherVar:'文本'
},
名称3:{
编号:-.1,
otherVar:“一些词”
}
};
设k=Object.keys(Object.sort)((a,b)=>Object[a].number>Object[b].number));
控制台日志(k)代码>NIIIICE一号!必须在顶部;)Niiiiiice一号!必须在顶部;)JSON.parse(object)
如何给你一个数组?它足够接近了,但是为什么你不使用keys()函数来获得数组呢?JSON.parse(object)
如何给你一个数组?它足够接近了,但是你为什么不使用keys()函数来获得数组呢?好的,下面是一个完美答案的例子。谢谢分享:)实际上这并不是我想要的,我想要的是一个键数组,而不是键上的对象,所以我想要的不是[{number:-.1,…}['name3','name1'…谢谢@Damianaltenero。为了只获取名称,您可以重新映射结果数组,并获取密钥名称。好的,下面是一个完美答案的示例。感谢分享:)实际上这并不是我想要的,我想要的是一个密钥数组,而不是密钥处的对象,所以我想要的不是[{number:-.1,…}['name3','name1'…谢谢@Damianalattenero。要得到名称,你可以重新映射结果数组,并获得密钥名称。哇哦,这太棒了,聪明了…:)谢谢分享哇哦,这太棒了,聪明了…:)谢谢分享这是一个非常好的内联解决方案,这就是规则:)我的解决方案没有那么可怕,这就是为什么我喜欢它更重要的是,我现在学会了如何去做:这是一个非常好的内联解决方案,规则:)我的解决方案不是很好,这就是为什么a更喜欢它,我现在学会了如何去做:这不起作用。键中没有number
属性。是啊@Barmar好眼睛!你是ab