例如:
arr1 = [["26","27"],["28","27"],["22","21"]]
输出结果为[["26","27","28"],["22","21"]]
arr2 = [["26","27","28"],["26","27","28","29"],["22","21"]]
输出结果为[["26","27","28","29"],["22","21"]]
该如何实现呢? 求教!
例如:
arr1 = [["26","27"],["28","27"],["22","21"]]
输出结果为[["26","27","28"],["22","21"]]
arr2 = [["26","27","28"],["26","27","28","29"],["22","21"]]
输出结果为[["26","27","28","29"],["22","21"]]
该如何实现呢? 求教!
const arr2 = [["26","27","28"],["26","27","28","29"]];
[...new Set( arr2.flat(Infinity))]
function merge(data, res=[]) {
return data.reduce((pre, cur) => {
let isIntsct = (pre.length + cur.length) === [...new Set([...pre, ...cur])].length;
!isIntsct ? res.push([...new Set([...pre, ...cur])]) : res.push(cur)
return res;
})
}
暴力法
function check(arr1, arr2) {
return arr1.some(a1 => arr2.some(a2 => a1 === a2))
}
function merge(arr) {
const result = []
for (const a of arr) {
let merged = false;
for (const r of result) {
if (check([...r], a)) {
a.forEach(item => r.add(item))
merged = true
}
}
if (!merged) {
result.push(new Set(a))
}
merged = false
}
return result.map(s => [...s])
}
这个问题其实是目标不明确,因为是二维数组,再转换到二维数组,但现在例子的规则并不完整,或者适当
比如输入:
arr2 = [["24","25"],["26","27","28"],['25',"26","27","28","29"],["22","21"]]
的输出该是什么?
输出可能1 = [["24","25","29"],["26","27","28"],["22","21"]]
输出可能2 = [["24","25","26","27","28","29"],["22","21"]]
...
一般对于类似的处理是把二级数组转换到一维数组,并去重
for (let i = 1; len = arr.length; i++) {
const current = arr[i];
for (let j = 0; j < i; j++) {
const prev = arr[j];
const newArr = [...new Set(prev.concat(current))];
if (newArr.length !== prev.length + current.length) {
arr[j] = newArr;
arr.splice(i, 1);
i--;
break;
}
}
}
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决