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