繁体   English   中英

如何获取数组A和数组B的所有项目并将其保存在数组C中? 使用JavaScript而不使用循环

[英]How to get all items that are both is array A and B and save them in array C? using javascript without using loops

可以说我有

var A = [x, y, z]
var B = [1, 2, z, 3, x]

我如何才能像这样在A和B中同时显示商品

var C = [AB]

无需遍历两个数组来检查每次迭代

您可以使用Array.prototype.filter()Array.prototype.includes()确定两个数组是否包含相同的元素, Set为从结果数组中删除重复的元素

 var A = ["x", "y", "z"] var B = [1, 2, "z", 3, "x"] var C = [...new Set( [...A, ...B].filter(prop => A.includes(prop) && B.includes(prop))) ]; console.log(C); 

重复:

var C = [...A, ...B]
// Result: C = ["x", "y", "z", 1, 2, "z", 3, "x"]

没有重复:

var C = [...A, ...B].filter((el, i, a) => i === a.indexOf(el))
// Result: C = ["x", "y", "z", 1, 2, 3]

更新:如果要两个数组的交集:

var C = A.filter(function(n) {
    return B.indexOf(n) !== -1;
});
// Result: C = ["x", "z"]

 let a = new Set(["x", "y", "z"]); let b = new Set([1, 2, "z", 3, "x"]); let intersection = [...a].filter(x => b.has(x)); console.log(intersection); 

对每个数组排序然后合并?

/* sort DESC */
A.sort(function(a,b){ return b-a; })
B.sort(function(a,b){ return b-a; })

然后使用:

function union_destructive(a, b)
{
  var result = [];
  while( a.length > 0 || b.length > 0 )
  {  
     if      (a[0] > b[0] ){ result.push(a.shift()); }
     else if (a[0] < b[0] ){ result.push(b.shift()); }
     else /* they're equal */
     {
       result.push(a.shift());
       b.shift();
     }
  }

  return result;
}

javascript中数组交集的最简单代码 ):

多数民众赞成O(n log n)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM