在使用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()。我敢肯定有一个简单的答案,但我只是想不通。
答案 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];
};