【问题标题】: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])];

标签: javascript


【解决方案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)
            }
          })
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-06-29
            • 2017-03-22
            • 1970-01-01
            • 2018-02-28
            • 2017-01-01
            • 2023-03-14
            • 2013-12-27
            • 2021-03-11
            相关资源
            最近更新 更多