将多个数组合并为一个数组而不重复[重复]

Posted

技术标签:

【中文标题】将多个数组合并为一个数组而不重复[重复]【英文标题】:Concat multiple arrays into one array without duplicates [duplicate] 【发布时间】:2017-03-20 05:59:29 【问题描述】:

我想将 3 个数组的值推送到一个新数组中而不重复相同的值

var a = ["1", "2", "3"];
var b = ["3", "4", "5"];
var c = ["4", "5", "6"];
var d = [];

function newArray(x, y, z) 
    for(var i = 0; i < d.length; i++) 
        if(d.length == -1) 
            d[i].push(a[i])
        
    

    for(var i = 0; i < d.length; i++) 
        if(d.length == -1) 
            d[i].push(y[i])
        
    

    for(var i = 0; i < d.length; i++) 
        if(d.length == -1) 
            d[i].push(z[i])
        
    


newArray(a, b, c);

d = ["1", "2", "3", "4", "5", "6"];

【问题讨论】:

d = [...new Set([...a, ...b, ...c])]; 【参考方案1】:

如果您的目标是删除重复项,则可以使用集合,

var arr = [1, 2, 3, 4, 5, 5, 6, 6, 6, 7]
var mySet = new Set(arr)
var filteredArray = Array.from(mySet)
console.log(filteredArray.sort()) // [1,2,3,4,5,6,7]

【讨论】:

concat 在一行中也能很好地工作,用于将arr2 附加到arr1arr1 = Array.from(new Set(arr1.concat(arr2)));【参考方案2】:

您可以同时使用concat()Set,如下所示,

var a = ["1","2","3"];
var b = ["3","4","5"];
var c = ["4","5","6"];

var d = a.concat(b).concat(c);
var set = new Set(d);

d = Array.from(set);

console.log(d);

【讨论】:

【参考方案3】:

var a = ["1","2","3"]
  , b = ["3","4","5"]
  , c = ["4","5","6"]
  , d = [];

function newArray(x,y,z) 
  x.concat(y,z).forEach(item =>
     if (d.indexOf(item) == -1) 
       d.push(item); 
  );
  return d;


console.log(newArray(a,b,c));

【讨论】:

【参考方案4】:

使用非常有用的实用程序库 Lodash,您可以节省一些时间和精力。

你要找的函数是Union

正如 Lodash 所说:

从所有给定的数组中按顺序创建一个唯一值数组 使用 SameValueZero 进行相等比较。

例子

_.union([2], [1, 2]);
// => [2, 1]

【讨论】:

【参考方案5】:

var a = ["1", "2", "3"];
var b = ["3", "4", "5"];
var c = ["4", "5", "6"];

var d = [];

var hash = [];
AddToHash(a);

AddToHash(b);

AddToHash(c);

function AddToHash(arr) 
  for (var i = 0; i < arr.length; i++) 
    if (!hash[arr[i]]) 
      hash[arr[i]] = 1;
     else
      hash[arr[i]] += 1;
  


for (var i = 0; i < hash.length; i++) 
    d.push(i);

console.log(d);

希望对你有帮助

【讨论】:

【参考方案6】:

这是另一个版本:

var d = b.concat(c);
  d.forEach(function(el) 
    if (a.indexOf(el) === -1) 
    a.push(el)
  
)

ES6 版本:

let d = b.concat(c);
d.forEach(el => 
  if (a.indexOf(el) === -1) 
    a.push(el)
  
)

【讨论】:

以上是关于将多个数组合并为一个数组而不重复[重复]的主要内容,如果未能解决你的问题,请参考以下文章

php下将多个数组合并成一个数组的方法与实例代码

将两个数组合并为一个 Laravel PHP [重复]

如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?

Java中如何把两个数组合并为一个

c++两个数组合并成一个新数组

JAVA怎么合并两个数组