gpt4 book ai didi

javascript - 合并数组并保持顺序

转载 作者:行者123 更新时间:2023-11-29 21:46:01 25 4
gpt4 key购买 nike

我有一堆数组,我想合并它们,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 的 fiddle ,这是我的最终工作版本 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" ]

DEMO

关于javascript - 合并数组并保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31159040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com