我尝试对数组进行排序,但输出不是这个,我想要的。
我有一个这样的数组:
var myArray = [
{
...
"foo": false,
"bar": true,
...
},
{
...
"foo": true,
"bar": false,
...
},
{
...
"foo": true,
"bar": false,
...
},
{
...
"foo": false,
"bar": false,
...
},
...
];
我希望以这种方式排序这个数组
myArray.sort(function(a,b) {
var foo = a.foo;
var bar = b.bar;
if(foo === false && bar === true) {
// this should sort on top
return -1;
}
if(foo === false && bar === false) {
// this should sort as second
return 0;
}
if(foo === true && bar === true) {
// this should sort as third
return 0;
}
if(foo === true && bar === false) {
// this should sort as last
return 1;
}
});
我认为sort
函数存在逻辑问题。
我想要的输出是我在if评论中发表评论
答案 0 :(得分:1)
您可以根据现有条件向数组对象添加权重属性。像
var tempArr = myArray.map(function(obj) {
var foo = obj.foo;
var bar = obj.bar;
if (foo === false && bar === true) {
// this should sort on top
obj.weightage = 1;
}
if (foo === false && bar === false) {
// this should sort as second
obj.weightage = 2;
}
if (foo === true && bar === true) {
// this should sort as third
obj.weightage = 3;
}
if (foo === true && bar === false) {
// this should sort as last
obj.weightage = 4;
}
return obj;
});
然后在数组
上使用sort函数tempArr = tempArr.sort(function(a, b) {
return a.weightage - b.weightage;
});
答案 1 :(得分:0)
当Array.sort()
遇到带有compareFunction(a, b) == 0
的多个值a,b时,JavaScript标准没有定义0
的行为。大多数JavaScript引擎使用稳定的排序算法,该算法保证在排序后保持这些元素的相对位置。
这解释了为什么返回0
无法产生您想要的结果。
您需要建立所有相关元素的相对排序,并且只有在订单无关紧要时才返回dbquery=`mysql -D$MYDB -u$MYUSER -p$MYPASS -se "SELECT domain FROM domains"`
dbquery_array=( $( for i in $dbquery ; do echo $i ; done ) )
。