联合数组并保持秩序
union arrays and keep order
本文关键字:数组 更新时间:2023-09-26
我有一堆数组,我想合并它们,lodash做到了:
_.union(['a', 'c'], ['a','b', 'c'], ['b', 'z'], ['y']) // ["a", "c", "b", "z", "y"]
我希望我的数组在需要时重新排列,即:
- 首次出现
['a', 'c']
- 第二次出现时,我们在a之后有b,所以它应该返回
['a', 'b', 'c']
- 第三次出现时,我们在b之后有z,所以它应该返回
['a', 'b', 'z', 'c']
- 第四次出现时,我们只有y,所以它应该添加到数组
['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
这里有一个冗长的非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" ]
演示
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- javascript中的数组出错
- 如何使用 node.js 比较两个 json 数组
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- 如何通过数组更新角度子范围
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 在Javascript中转换对象数组
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串