@lppx/nlearn 1.1.15 → 1.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,23 +54,28 @@ function demonstrateArrayOperations() {
54
54
  fruits.forEach((fruit, index) => {
55
55
  console.log(` ${index}: ${fruit}`);
56
56
  });
57
- // map 转换
57
+ // map: 传入一个转换函数 (item, index?, array?) => newItem
58
+ // 作用: 对数组每个元素执行转换函数,返回由转换结果组成的新数组
58
59
  const upperFruits = fruits.map(fruit => fruit.toUpperCase());
59
60
  console.log('\nmap 转大写:', upperFruits);
60
- // reduce 累积计算
61
+ // reduce: 传入一个累积函数 (accumulator, currentItem, index?, array?) => newAccumulator 和初始值
62
+ // 作用: 将数组元素依次累积计算,最终返回一个累积结果
61
63
  const numbers = [1, 2, 3, 4, 5];
62
64
  const sum = numbers.reduce((acc, curr) => acc + curr, 0);
63
65
  console.log('\nreduce 求和:', sum);
64
66
  // reduce 统计字符串长度总和
67
+ // 累积函数接收累积值和当前元素,返回新的累积值
65
68
  const totalLength = fruits.reduce((total, fruit) => total + fruit.length, 0);
66
69
  console.log('reduce 总长度:', totalLength);
67
70
  // reduce 构建对象
71
+ // 累积函数可以构建复杂的数据结构,这里将数组转换为对象
68
72
  const fruitLengths = fruits.reduce((obj, fruit) => {
69
73
  obj[fruit] = fruit.length;
70
74
  return obj;
71
75
  }, {});
72
76
  console.log('reduce 构建对象:', fruitLengths);
73
- // filter 过滤
77
+ // filter: 传入一个判断函数 (item, index?, array?) => boolean
78
+ // 作用: 对数组每个元素执行判断函数,返回由判断为 true 的元素组成的新数组
74
79
  const filtered = fruits.filter(fruit => fruit.length > 5);
75
80
  console.log('\nfilter 长度>5:', filtered);
76
81
  }
@@ -18,6 +18,7 @@ exports.basicConfigOptions = basicConfigOptions;
18
18
  exports.searchNestedObjects = searchNestedObjects;
19
19
  exports.controlResultCount = controlResultCount;
20
20
  const fuse_js_1 = __importDefault(require("fuse.js"));
21
+ const node_console_1 = require("node:console");
21
22
  // #region 示例1: 简单字符串数组搜索
22
23
  function searchStringArray() {
23
24
  console.log('\n=== 示例1: 简单字符串数组搜索 ===');
@@ -25,10 +26,11 @@ function searchStringArray() {
25
26
  const fruits = ['Apple', 'Banana', 'Orange', 'Pineapple', 'Grape', 'Watermelon'];
26
27
  // 创建 Fuse 实例
27
28
  const fuse = new fuse_js_1.default(fruits, {
28
- includeScore: true
29
+ includeScore: true // 在结果中包含匹配分数,分数越低表示匹配度越高(0 为完美匹配)
29
30
  });
30
31
  // 执行搜索
31
32
  const result = fuse.search('aple'); // 故意拼错,测试模糊搜索
33
+ (0, node_console_1.log)(result);
32
34
  console.log('搜索 "aple" 的结果:');
33
35
  result.forEach(item => {
34
36
  console.log(` - ${item.item} (匹配度: ${item.score?.toFixed(3)})`);
@@ -48,10 +50,12 @@ function searchObjectArray() {
48
50
  ];
49
51
  // 配置搜索的键
50
52
  const fuse = new fuse_js_1.default(books, {
51
- keys: ['title', 'author']
53
+ keys: ['title', 'author'],
54
+ includeScore: true
52
55
  });
53
56
  // 搜索标题或作者包含 "script" 的书籍
54
57
  const result = fuse.search('script');
58
+ (0, node_console_1.log)(result);
55
59
  console.log('搜索 "script" 的结果:');
56
60
  result.forEach(item => {
57
61
  console.log(` - ${item.item.title} by ${item.item.author}`);
@@ -77,11 +81,6 @@ function basicConfigOptions() {
77
81
  includeScore: true, // 包含匹配分数
78
82
  minMatchCharLength: 2 // 最小匹配字符长度
79
83
  });
80
- console.log('配置说明:');
81
- console.log(' - threshold: 0.3 (较严格的匹配)');
82
- console.log(' - distance: 100');
83
- console.log(' - includeScore: true');
84
- console.log(' - minMatchCharLength: 2\n');
85
84
  const result = fuse.search('java');
86
85
  console.log('搜索 "java" 的结果:');
87
86
  result.forEach(item => {
@@ -121,6 +120,7 @@ function searchNestedObjects() {
121
120
  keys: ['name', 'profile.email', 'profile.city']
122
121
  });
123
122
  const result = fuse.search('上海');
123
+ (0, node_console_1.log)(result);
124
124
  console.log('搜索 "上海" 的结果:');
125
125
  result.forEach(item => {
126
126
  console.log(` - ${item.item.name}`);
@@ -134,17 +134,36 @@ function controlResultCount() {
134
134
  console.log('\n=== 示例5: 结果数量控制 ===');
135
135
  const countries = [
136
136
  'China', 'Canada', 'Chile', 'Colombia', 'Croatia',
137
- 'Cuba', 'Cyprus', 'Czech Republic', 'Cambodia', 'Cameroon'
137
+ 'Cuba', 'Cyprus', 'Czech Republic', 'Cambodia', 'Cameroon',
138
+ 'Costa Rica', 'Comoros', 'Congo', 'Cape Verde'
138
139
  ];
139
- const fuse = new fuse_js_1.default(countries);
140
+ const fuse = new fuse_js_1.default(countries, {
141
+ includeScore: true,
142
+ threshold: 0.4
143
+ });
140
144
  // 搜索以 C 开头的国家
141
- const allResults = fuse.search('c');
142
- console.log(`搜索 "c" 找到 ${allResults.length} 个结果:`);
143
- allResults.slice(0, 5).forEach((item, index) => {
144
- console.log(` ${index + 1}. ${item.item}`);
145
+ const searchTerm = 'ca';
146
+ const allResults = fuse.search(searchTerm);
147
+ console.log(`\n1. 获取所有结果 (共 ${allResults.length} 个):`);
148
+ allResults.forEach((item, index) => {
149
+ console.log(` ${index + 1}. ${item.item} (分数: ${item.score?.toFixed(3)})`);
145
150
  });
146
- if (allResults.length > 5) {
147
- console.log(` ... 还有 ${allResults.length - 5} 个结果`);
151
+ // 使用 limit 选项限制结果数量
152
+ console.log(`\n2. 使用 limit 限制为前 3 个结果:`);
153
+ const limitedResults = fuse.search(searchTerm, { limit: 3 });
154
+ limitedResults.forEach((item, index) => {
155
+ console.log(` ${index + 1}. ${item.item} (分数: ${item.score?.toFixed(3)})`);
156
+ });
157
+ // 根据分数过滤结果
158
+ console.log(`\n4. 只显示分数低于 0.3 的高质量匹配:`);
159
+ const highQualityResults = allResults.filter(item => (item.score ?? 1) < 0.3);
160
+ if (highQualityResults.length > 0) {
161
+ highQualityResults.forEach((item, index) => {
162
+ console.log(` ${index + 1}. ${item.item} (分数: ${item.score?.toFixed(3)})`);
163
+ });
164
+ }
165
+ else {
166
+ console.log(' 没有找到高质量匹配结果');
148
167
  }
149
168
  }
150
169
  // #endregion
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.1.15",
6
+ "version": "1.1.19",
7
7
  "description": "ts test",
8
8
  "bin": {
9
9
  "nlearn": "dist/src/cli/index.js",