在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调用该函数作为导出时,排序不会发生。没有错误,函数的其余部分只是以与sort函数之前相同的顺序执行。
我已经尝试了所有我能想到的东西。我已经完成了module.exports.sortByField(),我尝试在完全独立的模块中要求.sortByField()。我确信这是一个简单的答案,但我无法理解。
回答如下:我怀疑它在两种情况下都是一样的,但问题是sort
回调是不正确的。
sort
回调必须返回一个负数,0或一个正数,而不是一个布尔值:如果第一个条目应该在第二个之前,则为负数,如果它们相同,则为0,如果第一个应该在第一个之后,则为正数第二。
如果cards
包含数字,您需要:
return card1[fieldName] - card2[fieldName];
...如果你想升序排序。
如果是字符串,您可以使用localeCompare
:
return card1[fieldName].localeCompare(card1[fieldName]);
在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调用该函数作为导出时,排序不会发生。没有错误,函数的其余部分只是以与sort函数之前相同的顺序执行。
我已经尝试了所有我能想到的东西。我已经完成了module.exports.sortByField(),我尝试在完全独立的模块中要求.sortByField()。我确信这是一个简单的答案,但我无法理解。
回答如下:我怀疑它在两种情况下都是一样的,但问题是sort
回调是不正确的。
sort
回调必须返回一个负数,0或一个正数,而不是一个布尔值:如果第一个条目应该在第二个之前,则为负数,如果它们相同,则为0,如果第一个应该在第一个之后,则为正数第二。
如果cards
包含数字,您需要:
return card1[fieldName] - card2[fieldName];
...如果你想升序排序。
如果是字符串,您可以使用localeCompare
:
return card1[fieldName].localeCompare(card1[fieldName]);