Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 - Fatal编程技术网

JavaScript对象多重排序

JavaScript对象多重排序,javascript,Javascript,ArrayObject=[{ 0:{label:117,objects:Array1,toString:ƒ,status:1} 1:{label:118,objects:Array1,toString:ƒ,status:1} 2:{label:156,objects:Array1,toString:ƒ,status:1} 3:{label:164,objects:Array1,toString:ƒ,status:1} 4:{label:asterisk,objects:Array1,toStri

ArrayObject=[{ 0:{label:117,objects:Array1,toString:ƒ,status:1} 1:{label:118,objects:Array1,toString:ƒ,status:1} 2:{label:156,objects:Array1,toString:ƒ,status:1} 3:{label:164,objects:Array1,toString:ƒ,status:1} 4:{label:asterisk,objects:Array1,toString:ƒ,status:1} ] 我的主张:

常量myArray=[ {标签:Text1}, {label:abc}, {标签:}, {标签:text2}, {标签:123} ]; const sorted=myArray.sorta,b=>a.label=='*'?-1:a.label.localeCompareb.label; console.logsorted我的建议:

常量myArray=[ {标签:Text1}, {label:abc}, {标签:}, {标签:text2}, {标签:123} ]; const sorted=myArray.sorta,b=>a.label=='*'?-1:a.label.localeCompareb.label; 控制台。日志排序 变量ArrayObject=[{ 标签:* }, { 标签:123 }, { 标签:Text1 }, { 标签:text2 } ] var答案=[ …ArrayObject.filterx=>x.label='*', …ArrayObject.filterx=>x.label!='*'.sorta,b=>a.label>=b.label?1:-1 ] console.loganswer; 变量ArrayObject=[{ 标签:* }, { 标签:123 }, { 标签:Text1 }, { 标签:text2 } ] var答案=[ …ArrayObject.filterx=>x.label='*', …ArrayObject.filterx=>x.label!='*'.sorta,b=>a.label>=b.label?1:-1 ]
console.loganswer;您可以使用三元运算符将*移动到数组的开头

让数据=[{label::},{label:123},{label:Text1},{label:text2}]; data.sorta,b=>a.label==*?-1:b.label==*?1:a.label.localeCompareb.label,未定义,{numeric:true};
console.logdata;您可以使用三元运算符将*移动到数组的开头

让数据=[{label::},{label:123},{label:Text1},{label:text2}]; data.sorta,b=>a.label==*?-1:b.label==*?1:a.label.localeCompareb.label,未定义,{numeric:true};
console.logdata;首先,明智地使用{和[1]。这是一个有1个对象的数组,其中有5个字段,每个字段是4个字段的对象。换句话说,数组只有1个元素。没有理由对1个元素进行排序

ArrayObject = [{

0: {label: "117", objects: Array(1), toString: ƒ, status: 1},
1: {label: "118", objects: Array(1), toString: ƒ, status: 1},
2: {label: "156", objects: Array(1), toString: ƒ, status: 1},
3: {label: "164", objects: Array(1), toString: ƒ, status: 1},
4: {label: "asterisk", objects: Array(1), toString: ƒ, status: 1}

}];
你可能是说这是一个由5个对象组成的数组。现在排序是合理的

ArrayObject = [

 {label: "117"},
 {label: "118"},
 {label: "156"},
 {label: "164"},
 {label: "asterisk"}

];
现在开始排序。默认情况下,数组是根据其元素的自然顺序进行排序的。如果元素是一个对象,那么我们主要希望提供自己的排序逻辑

字符串是根据这些字符的词法顺序排序的,这是正确的,但更正确的是,事实上,正在比较这些ascii代码,并作为结果

c++总是比Java、c甚至Python更强大

因为C++中小写的C’的ASCII代码大于'j’c‘p’< /p>的ASCII码 如果您有这些字符串的数组,您将按如下升序排序

var languages= ["C#", "c++", "Java", "Python"];
languages.sort();

//Output
[ "C#", "Java", "Python", "c++" ]
现在,在您的例子中,您有一个对象数组,其中每个对象都有一个字符串字段,您希望根据您的要求对该字段进行排序。为此,您需要编写一个布尔值作为排序方法的参数,该方法将定义您的排序逻辑。现在让我们暂时忘记您的要求,并按照上述字符串的自然顺序进行排序。

var languages = [
 {name: "C#"},
 {name: "c++"},
 {name: "Java"},
 {name: "Python"}  
];

languages.sort( (a,b) => {
        return a.name > b.name;
    });

//Output
[
 {name: "C#"},
 {name: "Java"},
 {name: "Python"},
 {name: "c++"}  
]
假设有人错误地告诉你Javascript是第一语言,因此是最伟大的语言。这意味着保持Javascript最伟大,并根据自然顺序对其他元素进行排序,那么你的排序逻辑将是

var languages = [
 {name: "C#"},
 {name: "c++"},
 {name: "Java"},
 {name: "Javascript"},
 {name: "Python"}  
];

languages.sort((a,b)=>{  
    if(a.name=="Javascript")
        return true;
    else
        if(b.name =="Javascript")
            return false;
    else
        return a.name > b.name

});

//Output
[
 {name: "C#"},
 {name: "Java"},
 {name: "Python"},
 {name: "c++"},
 {name: "Javascript"}  
]
当你清醒过来的时候

 languages.sort((a,b)=>{  
        if(a.name=="Javascript")
            return false;
        else
            if(b.name =="Javascript")
                return true;
        else
            return a.name > b.name

    });

//Output
[
 {name: "Javascript"} ,
 {name: "C#"},
 {name: "Java"},
 {name: "Python"},
 {name: "c++"}

]
当a.name为Javascript时返回true,当b.name为Javascript时返回false,我们告诉排序算法,当a.name为Javascript时始终将a向右交换,当b.name为Javascript时不交换。如果a.name和b.name都不是Javascript,则只需保持自然升序,这是a.name>b.name的结果

如果像代码的第二个版本那样颠倒true和false,则会发生完全相反的情况。这就是为什么Javascript位于第一个索引中


希望我已经启发了你。

首先,明智地使用你的{and[和]。这是一个数组,有1个对象,其中有5个字段,每个字段是4个字段的对象。换句话说,数组只有1个元素。没有理由对1个元素进行排序

ArrayObject = [{

0: {label: "117", objects: Array(1), toString: ƒ, status: 1},
1: {label: "118", objects: Array(1), toString: ƒ, status: 1},
2: {label: "156", objects: Array(1), toString: ƒ, status: 1},
3: {label: "164", objects: Array(1), toString: ƒ, status: 1},
4: {label: "asterisk", objects: Array(1), toString: ƒ, status: 1}

}];
你可能是说这是一个由5个对象组成的数组。现在排序是合理的

ArrayObject = [

 {label: "117"},
 {label: "118"},
 {label: "156"},
 {label: "164"},
 {label: "asterisk"}

];
现在开始排序。默认情况下,数组是根据其元素的自然顺序进行排序的。如果元素是一个对象,那么我们主要希望提供自己的排序逻辑

字符串是根据这些字符的词法顺序排序的,这是正确的,但更正确的是,事实上,正在比较这些ascii代码,并作为结果

c++总是比Java、c甚至Python更强大

因为C++中小写的C’的ASCII代码大于'j’c‘p’< /p>的ASCII码 如果您有这些字符串的数组,您将按如下升序排序

var languages= ["C#", "c++", "Java", "Python"];
languages.sort();

//Output
[ "C#", "Java", "Python", "c++" ]
现在在你的情况下,你有一个Arra 对象的y,其中每个对象都有一个字符串字段,您希望根据需要在该字段上排序。为此,您需要编写一个布尔值作为sort方法的参数,该方法将定义您的排序逻辑。让我们暂时忘记您的要求,并按照上述字符串的自然顺序进行排序

var languages = [
 {name: "C#"},
 {name: "c++"},
 {name: "Java"},
 {name: "Python"}  
];

languages.sort( (a,b) => {
        return a.name > b.name;
    });

//Output
[
 {name: "C#"},
 {name: "Java"},
 {name: "Python"},
 {name: "c++"}  
]
假设有人错误地告诉您Javascript是第一语言,因此是最伟大的语言。这意味着保持Javascript最大,并根据自然顺序对其他元素进行排序,那么您的排序逻辑将是

var languages = [
 {name: "C#"},
 {name: "c++"},
 {name: "Java"},
 {name: "Javascript"},
 {name: "Python"}  
];

languages.sort((a,b)=>{  
    if(a.name=="Javascript")
        return true;
    else
        if(b.name =="Javascript")
            return false;
    else
        return a.name > b.name

});

//Output
[
 {name: "C#"},
 {name: "Java"},
 {name: "Python"},
 {name: "c++"},
 {name: "Javascript"}  
]
当你清醒过来的时候

 languages.sort((a,b)=>{  
        if(a.name=="Javascript")
            return false;
        else
            if(b.name =="Javascript")
                return true;
        else
            return a.name > b.name

    });

//Output
[
 {name: "Javascript"} ,
 {name: "C#"},
 {name: "Java"},
 {name: "Python"},
 {name: "c++"}

]
通过在a.name为Javascript时返回true,在b.name为Javascript时返回false,我们告诉排序算法在a.name为Javascript时始终将a向右交换,在b.name为Javascript时不交换。如果a.name和b.name都不是Javascript,那么只需保持自然的升序,这是a.name>b.name的结果

如果在代码的第二个版本中颠倒了true和false,则会发生完全相反的情况。这就是Javascript位于第一个索引的原因


希望我已经启发了您。

发布的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试的内容,以便说明您遇到的具体障碍。有关更多信息,请参阅并获取。给定示例场景,我面临这个问题。那么?请自己尝试。这不起作用…请使用有效语法发布数据,例如作为JSON结构。目前还不清楚ArrayObject和label应该是什么。发布的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试的内容,以便说明您遇到的具体障碍。有关更多信息,请参阅并获取。给定示例场景,我面临这个问题。那么?请自己尝试。这不起作用…请使用有效语法发布数据,例如作为JSON结构。还不清楚ArrayObject和label应该是什么,这还不够。如果b.标签不起作用怎么办。。。我尝试过这个返回x==星号-1:y==星号?1 : 0;} * 位于顶部,但其他默认排序不起作用。这还不够。如果b.标签不起作用怎么办。。。我尝试过这个返回x==星号-1:y==星号?1 : 0;} * 位于顶部,但其他默认排序不起作用。