对具有两个以上状态的数组进行排序

时间:2016-06-10 00:53:35

标签: javascript arrays sorting

我尝试对数组进行排序,但输出不是这个,我想要的。

我有一个这样的数组:

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评论中发表评论

2 个答案:

答案 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 ) )