微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Array.sort函数仅适用于单个条件

如何解决Array.sort函数仅适用于单个条件

我正在尝试按值进行组织,然后按字母顺序排列它们是否具有相同的值。

function order(a,b,total) {
    if (total == 0) {
        return a.localeCompare(b)
    } else {
        return total;
    }
}

var thingsArr = {"lamp":2,"books":2};

Object.keys(thingsArr).sort(function (a,b) {
    order(a,thingsArr[b] - thingsArr[a])
});

else(在函数顺序内)不是应该按字母顺序组织结果数组,而if却不是按最高值组织?仅当我单独使用它们时,它才有效。
我在做什么错了?

解决方法

您需要在sort函数内返回一个值!

function order(a,b,total) {
    if (total == 0) {
        return a.localeCompare(b);
    } else {
        return total;
    }
}

var thingsArr = {"lamp":2,"books":2};

const result = Object.keys(thingsArr).sort(function (a,b) {
    return order(a,thingsArr[b] - thingsArr[a]);
});

console.log(result);
,

如果目的是获得一个有序的名称列表,则可以通过将总计算移到您的订购函数上来稍微提高可读性,例如:

const things = {"lamp":2,"books":2}; // not an array (thingsArr?)

function orderThings(a,b) {
    const total = things[b] - things[a];
    if (total === 0) {
        return a.localeCompare(b)
    }
    return total;
}

Object.keys(things).sort(orderThings);

但是,如果您计划使用列表作为键来引用您的商品,则可能值得考虑映射到对象数组{name:“ lamp”,qty:2}或元组[“ lamp”,2]您可以这样做。

const things = {"cupboard": 0,"lamp": 2,"books": 2};

function mapValuesToObj([name,qty]) {
    return {
      name,qty,};
}

function orderThings(a,b) {
    const total = b.qty - a.qty;
    if (total === 0) {
        return a.name.localeCompare(b.name)
    }
    return total;
}

Object.entries(things).map(mapValuesToObj).sort(orderThings);

返回:

[
  { name: 'books',qty: 2 },{ name: 'lamp',{ name: 'cupboard',qty: 0 }
]

希望这对您有所帮助:)坚持下去,您做得很棒!

,

需要在数组排序函数上返回值。 您需要根据参数和顺序结果返回负,零或正整数值。

有关更多信息,请参考该网址。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。