很新手,关于这个数组
[
["工具", [["U"], ["B"], ["U"], ["I"]]],
["学习", [["I"], ["B"], ["I"], ["U"]]],
]
如果索引项 1 中的数组有相同的先去重,之后如果两个数组相同就合并,就想上面这个输出的结果是
[
["工具学习", [["B"], ["I"], ["U"]]],
]
请问这个该怎么写啊
1
aglsv OP 有没有人可以来回答一下 TvT
|
2
whitelee8080 2021-05-12 13:46:43 +08:00
遍历放到 map 中。
|
3
grewer 2021-05-12 13:56:53 +08:00
|
4
aglsv OP @whitelee8080 请问有具体的代码吗,我不太能搞懂
|
5
hello2060 2021-05-12 14:43:36 +08:00 via iPhone
索引项 1 是啥意思?
|
6
umissthestars 2021-05-12 14:50:42 +08:00
说吧,测试数据除了两三条的,会不会突然来个 9 万 9 千条的,多久算超时。
============= 如果只有 2 个,里面也都是填充大写字母,用工具大约是 对两个[1]join,然后 填个大于小于的比较 sort,然后看是否要合并,然后 split 回来,大约 4-5 行的样子 |
8
aglsv OP @umissthestars
``` function uni(arr) { let res = {}; arr.map((item) => { item.sort((a, b) => a - b); res[item] = item; }); return Object.values(res); } ``` 这么写了个去重的,想问问如果这两条数据之间还有其他数据的话,怎么比较这两个数据并合并 |
9
umissthestars 2021-05-12 15:23:42 +08:00 1
function merge (input) {
const a1 = sort(unique(input[0][1])) const a2 = sort(unique(input[1][1])) if (a1.join() === a2.join()) return { [`${input[0][0]}${input[1][0]}`]: a1.flatMap(i => [i]) } else return input } function unique (arr) { const ret = arr.flatMap(i => i[0]) return [...new Set(ret)] } function sort (arr) { return arr.sort((a, b) => a.charCodeAt() - b.charCodeAt()) } |
10
hello2060 2021-05-12 15:27:45 +08:00
@aglsv 那就两步啊, 第一步把 1 项去重, 第二步合并. 根据 1 项实际的长度看要不要生成一个 hash 这样合并的时候直接比较 hash
|
11
umissthestars 2021-05-12 17:23:27 +08:00
@aglsv 有多条数据就把上面改改
function merge(input) { const record = {}; input.forEach((item) => { const itemValue = sort(unique(item[1])); if (record[itemValue]) { record[itemValue].push(item[0]); } else { // 反过来存方便查询 record[itemValue] = [item[0]]; } }); return decorate(record); } function decorate(record) { const result = []; Object.entries(record).forEach(([v, k]) => { result.push([k.join(""), v.split(',').flatMap(i => [i])]); }); return result; } function unique(arr) { return [...new Set(arr.flatMap((i) => i[0]))]; } function sort(arr) { return arr.sort((a, b) => a.charCodeAt() - b.charCodeAt()); } |
12
jmc891205 2021-05-12 17:33:50 +08:00
sort, 然后遍历一遍去重。这样处理过之后可以拼接出一个字符串,用这个字符串做 key 插入到 hash table 里去。
之后每一项 sort 并去重后,先去 hash table 里查之前有没有这个 key,有的话就拼接,没有就插入。 |