Javascript 使用条件对键的对象进行排序
我有下面的目标Javascript 使用条件对键的对象进行排序,javascript,sorting,object,Javascript,Sorting,Object,我有下面的目标 Object={ '11': 1.2317655481421725, '12': 1.233489927305401, '13': 1.2317655481421725, '14': 1.233489927305401, '15': 1.205620575126925, '16': 1.2600762465738233, '17': 1.205620575126925, '18': 1.2600762465738233, '4
Object={
'11': 1.2317655481421725,
'12': 1.233489927305401,
'13': 1.2317655481421725,
'14': 1.233489927305401,
'15': 1.205620575126925,
'16': 1.2600762465738233,
'17': 1.205620575126925,
'18': 1.2600762465738233,
'41': 0.8577882967879851,
'42': 0.8890249774881712,
'43': 0.8577882967879851,
'44': 0.8890249774881712,
'45': 0.8268651773658509,
'46': 0.8977620865671874,
'47': 0.8268651773658509,
'48': 0.8977620865671874
}
我需要根据一些条件,按值排序
当键的值相等时,检查每一个键的标志,该标志可以是0或1,并首先对标志=1的键进行排序
在任何其他情况下,按值降序排列所有剩余键
我运行的代码如下所示
keysSorted = Object.keys(Object).sort(function(a,b){
Flag_b=parseInt(Products[Object.keys(Object)[b-1]]['attribute'])
Flag_a=parseInt(Products[Object.keys(Object)[a-1]]['attribute'])
// console.log('key a',Object.keys(Object)[a-1],'Flag_a ', Flag_a, 'key b',Object.keys(Object)[b-1],'Flag_b', Flag_b)
//case equal utilities
if ((Object[b]===Object[a]) && (user.answer===1)){
key_a=Object.keys(Object)[a-1]
key_b=Object.keys(Object)[b-1]
console.log('true equality','key_b',key_b,'Object[b]',Object[b],'key a',key_a,'Object[a]',Object[a])
console.log('key a',key_a,'Flag_a ', Flag_a, 'key b',key_b,'Flag_b', Flag_b)
if (Flag_a===1){
return -1
}
}
if (Object[b]!==Object[a]){
return (Object[b]-Object[a])
}
})
正确的排序将从键值11和13开始,如果键值11的标志为0,键值13的标志为1,则首先对[13,11…]进行排序。对象提供其属性的情况是,您无法更改所显示对象的属性,因为名称完全由0到2-1范围内的数字组成的属性的顺序是数字。因此,无论您对该对象或其他对象执行什么操作,名称为11的属性始终位于名称为42的属性之前
尝试将对象按特定顺序放置通常是一种糟糕的做法,即使在可能的情况下也是如此,因为属性名不完全由数字组成
相反,使用键/值对象数组,并对其进行排序。如果对象是对象,该怎么办={ 11: 1.2317655481421725, 12: 1.233489927305401, 13: 1.2317655481421725, 14: 1.233489927305401, 15: 1.205620575126925, 16: 1.2600762465738233, 17: 1.205620575126925, 18: 1.2600762465738233, 41: 0.8577882967879851, 42: 0.8890249774881712, 43: 0.8577882967879851, 44: 0.8890249774881712, 45: 0.8268651773658509, 46:0.8977620865671874,47:0.8268651773658509,48:0.8977620865671874}那么有可能吗?@user2829319-该对象具有相同的键。虽然可以为属性名编写带有数字文本的对象文本,但属性键松散,名称仍然是字符串,它们被转换。因此{11:eleven}和{11:eleven}创建完全相同的对象。对象从来没有数字作为属性键,只有字符串和符号。好了,现在清楚了。我已经使用map函数将其转换为对象的键、值数组,希望能得到我需要的位置。一旦得到它,我将更新代码above@user2829319-无需更新问题,您已经如果你在排序时遇到麻烦,这里有很多关于如何对数组排序的答案;但是如果没有任何答案可以帮助你解决这个问题,那么就用数组、规则和你的代码发布一个新的问题,这些问题不太有效,大家都会乐意提供帮助。