[英]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.