簡體   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