我有一堆数组,我想要将它们联合起来,lodash会这样做:
_.union(['a', 'c'], ['a','b', 'c'], ['b', 'z'], ['y']) // ["a", "c", "b", "z", "y"]
我期望我的阵列在需要时重新排列,即:
['a', 'c']
['a', 'b', 'c']
['a', 'b', 'z', 'c']
['a', 'b', 'z', 'c', 'y']
我期待:
_.union(['a', 'c'], ['a','b', 'c'], ['b', 'z'], ['y']) // ['a', 'b', 'z', 'c', 'y']
我有
_.union(['a', 'c'], ['a','b', 'c'], ['b', 'z'], ['y']) // ["a", "c", "b", "z", "y"]
我怎么能实现这个目标?
编辑:调整@Andy的小提琴,这是我最后的工作版 Demo
答案 0 :(得分:2)
这是一个冗长的非lodash版本:
function union() {
var arrs = [].slice.call(arguments);
var out = [];
for (var i = 0, l = arrs.length; i < l; i++) {
for (var j = 0, jl = arrs[i].length; j < jl; j++) {
var currEl = arrs[i][j];
if (out.indexOf(currEl) === -1) {
if (j - 1 !== -1 && out.indexOf(arrs[i][j - 1]) > -1) {
out.splice(out.indexOf(arrs[i][j - 1]) + 1, 0, currEl);
} else {
out.push(currEl);
}
}
}
}
return out;
};
var result = union(['a', 'c'], ['a', 'b', 'c'], ['b', 'z'], ['y']);
console.log(result) // [ "a", "b", "z", "c", "y" ]