繁体   English   中英

在 Node.js 模块中使用函数

[英]Using function within Node.js module

我在 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 的导出调用时,排序不会发生。 没有错误,函数的其余部分只是按照与排序函数之前相同的顺序对数组执行。

我已经尝试了所有我能想到的。 我已经完成了 module.exports.sortByField(),我尝试在一个完全独立的模块中要求 .sortByField()。 我敢肯定有一个简单的答案,但我就是想不通。

我怀疑它在两种情况下的工作方式相同,但问题是sort回调不正确。

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

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

return card1[fieldName] - card2[fieldName];

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

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

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

所以我希望可以原谅我对这一切的陌生,但事实证明,我最初发布的代码根本不是问题。 长话短说,我传递给 getResult() 函数的数组是一个数组数组,而不是一个对象数组。

我正在使用以下代码将卡片添加到一系列已播放的卡片中:

playedCards.push(game.playCard(1, players[0].hand, 3));

而 playCard() 函数正在导出一个数组:

exports.playCard = function(amount, hand, index) {
    const cards = hand.splice(index, amount);
    return cards;
};

但我应该一直导出单个对象:

exports.playCard = function(amount, hand, index) {
    const cards = hand.splice(index, amount);
    return cards[0];
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM