在Node.js模块中使用函数

时间:2019-02-14 06:44:38

标签: javascript 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调用该函数作为导出时,不会发生排序。没有错误,该函数的其余部分仅以与排序函数之前相同的顺序对数组执行。

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

2 个答案:

答案 0 :(得分:1)

我怀疑在两种情况下它都可以正常工作,但是问题是{ "_type": "SearchResponse", "queryContext": { "originalQuery": "fourhorsemenbk.com" } } 回调不正确。

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

如果sort包含数字,则需要:

cards

...如果要升序排序。

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

return card1[fieldName] - card2[fieldName];

答案 1 :(得分:0)

因此,我希望我能对这一切感到陌生,但是事实证明,我最初发布的代码根本不是问题。长话短说,我传递给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];
};