注意
根据 @Kaddath 的建议,编辑了问题以突出显示排序不一定要按字母顺序进行,而是取决于数组中项目的位置。
我有一个数组的数组,每个数组都基于给定的顺序,但它们可能会有些不同。
例如,基本排序为X -> D -> H -> B
,这是我的数组:
const arrays = [
['X', 'D', 'H', 'B'],
['X', 'D', 'K', 'Z', 'H', 'B', 'A'],
['X', 'M', 'D', 'H', 'B'],
['X', 'H', 'T'],
['X', 'D', 'H', 'B']
]
我希望将所有数组合并为一个数组,并通过保持顺序来去除重复项。在我的示例中,结果应为
['X','M','D','K','Z','H','T','B','A']
。在此示例中,我们可以看到
M
在第三个数组中位于X
和D
之间,最终输出中也是这样。我知道可能会出现冲突,但以下是规则:
- 每个项都应出现在最终输出中。
- 如果某个项在多个数组中以不同的位置出现,则第一次出现的位置是正确的(跳过其他位置)。
const merged = [].concat.apply([], arrays);
参考:https://dev59.com/cmgv5IYBdhLWcg3wD8yY#10865042。
然后,使用此代码片段从https://dev59.com/BHI-5IYBdhLWcg3w-9wK#1584377获取唯一值:
Array.prototype.unique = function() {
var a = this.concat();
for(var i=0; i<a.length; ++i) {
for(var j=i+1; j<a.length; ++j) {
if(a[i] === a[j])
a.splice(j--, 1);
}
}
return a;
};
const finalArray = merged.unique();
但我的结果是这样的:
[
"X",
"D",
"H",
"B",
"K",
"Z",
"A",
"M",
"T"
]
任何帮助都受欢迎!感谢。
finalArray.sort()
。 - Satpal['A', 'B', 'C', 'D']
,但它也可以是['X', '1', 'D', 'EE']
(任何其他东西),结果应该保持基本数组的顺序,但在现有项之间添加项目(例如A-bis
被添加在A
和B
之间,不是因为它按字母顺序排序,而是因为它出现在以下数组之一的这两个项之间)。 - MHogge