在处理自动化工作流时,您经常会遇到需要整理数据的情况。无论是按价格排列产品、按日期组织事件,还是随机打乱列表,Sort节点都是您的得力助手。本教程将帮助您快速上手n8n的Sort节点,学会如何灵活运用三种排序方式。
Sort节点用于组织和重新排列数据列表。它基于JavaScript的Array.sort()方法,支持三种排序模式:
Sort节点在处理数组数据时,会将元素转换为字符串进行字典序比较。例如,数字"100"会排在"2"前面(因为"1"小于"2")。因此,正确配置字段类型很关键。
何时使用:当您需要按一个或多个字段进行标准的升序/降序排列时
配置步骤:
price、name、createdAt)进阶选项:
user.email),可以引用嵌套字段。如果字段名本身包含点号,需要关闭此选项。示例:按价格升序排列产品
字段名:price
顺序:Ascending
结果:最便宜的产品排在最前何时使用:当您需要随机打乱列表顺序时,常用于测试或随机抽样
配置步骤:
实用场景:
何时使用:需要实现复杂的排序逻辑,例如按多个条件排序或自定义排序规则
配置步骤:
常见代码模式:
按数字字段排序:
const sortedArr = items.sort((a, b) => {
return a.json.price - b.json.price;
});
return sortedArr;按字符串字段排序:
const sortedArr = items.sort((a, b) => {
let a_name = a.json.name.toLowerCase();
let b_name = b.json.name.toLowerCase();
if (a_name < b_name) return -1;
if (a_name > b_name) return 1;
return 0;
});
return sortedArr;下面是一个完整的可执行工作流,展示如何使用Sort节点对产品数据进行排序。
一个电商平台需要:
将以下JSON代码复制到n8n中(使用 Import from File 或直接粘贴到画布上):
{
"name": "电商产品排序工作流",
"nodes": [
{
"parameters": {},
"name": "Manual",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [250, 300]
},
{
"parameters": {
"functionCode": "return [\n { json: { name: 'Gaming Laptop', price: 1200, category: 'Electronics' } },\n { json: { name: 'Wireless Mouse', price: 45, category: 'Accessories' } },\n { json: { name: '4K Monitor', price: 399, category: 'Electronics' } },\n { json: { name: 'Mechanical Keyboard', price: 150, category: 'Accessories' } },\n { json: { name: 'USB-C Hub', price: 89, category: 'Accessories' } },\n { json: { name: 'Laptop Stand', price: 65, category: 'Accessories' } }\n];"
},
"name": "Code - 产品数据",
"type": "n8n-nodes-base.code",
"typeVersion": 1,
"position": [450, 300]
},
{
"parameters": {
"type": "simple",
"fields": [
{
"name": "price",
"order": "asc"
}
]
},
"name": "Sort - 按价格升序",
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [650, 300]
},
{
"parameters": {
"operation": "limit",
"maxItems": 3,
"keep": "first"
},
"name": "Limit - 只保留前3个",
"type": "n8n-nodes-base.limit",
"typeVersion": 1,
"position": [850, 300]
}
],
"connections": {
"Manual": {
"main": [
[
{
"node": "Code - 产品数据",
"type": "main",
"index": 0
}
]
]
},
"Code - 产品数据": {
"main": [
[
{
"node": "Sort - 按价格升序",
"type": "main",
"index": 0
}
]
]
},
"Sort - 按价格升序": {
"main": [
[
{
"node": "Limit - 只保留前3个",
"type": "main",
"index": 0
}
]
]
}
}
}priceAscending3first[
{ "name": "Wireless Mouse", "price": 45, "category": "Accessories" },
{ "name": "Laptop Stand", "price": 65, "category": "Accessories" },
{ "name": "USB-C Hub", "price": 89, "category": "Accessories" }
]当您需要按多个条件排序(如先按分类,再按价格)时:
{
"type": "simple",
"fields": [
{
"name": "category",
"order": "asc"
},
{
"name": "price",
"order": "asc"
}
]
}规则:列表中第一个字段优先排序,如果出现相同值,则按第二个字段排序,以此类推。
对于日期字段,建议使用Code模式确保准确性:
const sortedArr = items.sort((a, b) => {
const dateA = new Date(a.json.createdAt);
const dateB = new Date(b.json.createdAt);
return dateB - dateA; // 最新的日期优先
});
return sortedArr;IF条件检查 → 不同排序规则 → 合并结果根据不同条件应用不同的排序方式,增强工作流的智能性。
症状:[1, 10, 2, 20] 而不是 [1, 2, 10, 20]
原因:数据被作为字符串比较
解决:在Code模式中使用数字比较
items.sort((a, b) => a.json.price - b.json.price)症状:无法按 user.name 排序
解决:确保"Disable Dot Notation"未被开启(保持默认),或在Code模式中访问嵌套属性:
items.sort((a, b) => {
return a.json.user.name.localeCompare(b.json.user.name);
})原因:Sort节点只重新排列,不修改数据结构
检查:确认前一个节点正确输出了所有数据
✅ 务必做的事:
❌ 避免做的事:
| 模式 | 最佳场景 | 复杂度 |
|---|---|---|
| Simple | 单字段或少数字段排序 | 低 |
| Random | 数据随机化 | 低 |
| Code | 自定义逻辑、复杂条件 | 高 |
通过本教程,您已经掌握了n8n Sort节点的核心用法。现在可以在您的工作流中灵活应用,构建更加智能的数据处理系统!
[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sort/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#