Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用条件对键的对象进行排序_Javascript_Sorting_Object - Fatal编程技术网

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-无需更新问题,您已经如果你在排序时遇到麻烦,这里有很多关于如何对数组排序的答案;但是如果没有任何答案可以帮助你解决这个问题,那么就用数组、规则和你的代码发布一个新的问题,这些问题不太有效,大家都会乐意提供帮助。