最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在Node.js模块中使用函数

IT培训 admin 5浏览 0评论

在Node.js模块中使用函数

我在Node.js模块中使用函数时遇到问题。我正在使用自定义排序函数按特定属性的值对对象数组进行排序。

exports.getResult = function(cards) {
    cards.sort(sortByField('suit'));
    ...
    ...
    ...
    return cards;
}

function sortByField(fieldName) {
    return function(card1, card2) {
        return card1[fieldName] < card2[fieldName]
    };
}

当我使用getResult函数NOT作为导出,并从同一个文件中调用它时,一切都按预期工作。具有最高套装值的卡对象是第一个,具有最低值的卡对象是最后一个。

但是,当我从index.js调用该函数作为导出时,排序不会发生。没有错误,函数的其余部分只是以与sort函数之前相同的顺序执行。

我已经尝试了所有我能想到的东西。我已经完成了module.exports.sortByField(),我尝试在完全独立的模块中要求.sortByField()。我确信这是一个简单的答案,但我无法理解。

回答如下:

我怀疑它在两种情况下都是一样的,但问题是sort回调是不正确的。

sort回调必须返回一个负数,0或一个正数,而不是一个布尔值:如果第一个条目应该在第二个之前,则为负数,如果它们相同,则为0,如果第一个应该在第一个之后,则为正数第二。

如果cards包含数字,您需要:

return card1[fieldName] - card2[fieldName];

...如果你想升序排序。

如果是字符串,您可以使用localeCompare

return card1[fieldName].localeCompare(card1[fieldName]);

在Node.js模块中使用函数

我在Node.js模块中使用函数时遇到问题。我正在使用自定义排序函数按特定属性的值对对象数组进行排序。

exports.getResult = function(cards) {
    cards.sort(sortByField('suit'));
    ...
    ...
    ...
    return cards;
}

function sortByField(fieldName) {
    return function(card1, card2) {
        return card1[fieldName] < card2[fieldName]
    };
}

当我使用getResult函数NOT作为导出,并从同一个文件中调用它时,一切都按预期工作。具有最高套装值的卡对象是第一个,具有最低值的卡对象是最后一个。

但是,当我从index.js调用该函数作为导出时,排序不会发生。没有错误,函数的其余部分只是以与sort函数之前相同的顺序执行。

我已经尝试了所有我能想到的东西。我已经完成了module.exports.sortByField(),我尝试在完全独立的模块中要求.sortByField()。我确信这是一个简单的答案,但我无法理解。

回答如下:

我怀疑它在两种情况下都是一样的,但问题是sort回调是不正确的。

sort回调必须返回一个负数,0或一个正数,而不是一个布尔值:如果第一个条目应该在第二个之前,则为负数,如果它们相同,则为0,如果第一个应该在第一个之后,则为正数第二。

如果cards包含数字,您需要:

return card1[fieldName] - card2[fieldName];

...如果你想升序排序。

如果是字符串,您可以使用localeCompare

return card1[fieldName].localeCompare(card1[fieldName]);

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论