提取数组之间的匹配值并将其保存到javascript中的新数组中

提取数组之间的匹配值并将其保存到javascript中的新数组中,javascript,arrays,Javascript,Arrays,我对编程非常陌生,我正在尝试完成以下练习: 声明一个新变量以存储从a2提取的所有a1。 迭代所有a2的元素,只提取与a1中的值匹配的元素 var a1=[“5”,“10”]; 变量a2=[ [“10”,“2”,“10”,“E”,“5”,“5”,“u”,“0”,“5”,“10”,“3”,“5”,“5”, [“10”、“10”、“5”、“9”、“10”、“5”、“5”、“5”、“5”、“5”、“5”], [“x”,“d”,“2”,“|”,“z”,“8”,“s”,“d”,“2”,“5”] ]; va

我对编程非常陌生,我正在尝试完成以下练习:

声明一个新变量以存储从a2提取的所有a1。 迭代所有a2的元素,只提取与a1中的值匹配的元素

var a1=[“5”,“10”];
变量a2=[
[“10”,“2”,“10”,“E”,“5”,“5”,“u”,“0”,“5”,“10”,“3”,“5”,“5”,
[“10”、“10”、“5”、“9”、“10”、“5”、“5”、“5”、“5”、“5”、“5”],
[“x”,“d”,“2”,“|”,“z”,“8”,“s”,“d”,“2”,“5”]
];
var a3=[];
对于(变量i=0;iconsole.log(a3)
您需要执行
a3。按
在数组中添加元素

var a1=[“5”,“10”];
变量a2=[
[“10”,“2”,“10”,“E”,“5”,“5”,“u”,“0”,“5”,“10”,“3”,“5”,“5”,
[“10”、“10”、“5”、“9”、“10”、“5”、“5”、“5”、“5”、“5”、“5”],
[“x”,“d”,“2”,“|”,“z”,“8”,“s”,“d”,“2”,“5”]
];
var a3=[];
对于(变量i=0;iconsole.log(a3);
问题在于您没有向
a3
添加元素,您只是通过

a3 = a2[i][j];
相反,将其推入阵列:

a3.push(a2[i][j]);
此外,您的代码当前假定
a1
的元素永远不会超过两个,因为您已硬编码代码,只查看其第一个和第二个元素。我们可以通过询问
a1
是否“包括”给定值使其更具动态性:

for (var i = 0; i < a2.length; i++) {
    for (var j = 0; j < a2[i].length; j++) {
        if (a1.includes(a2[i][j])) a3.push(a2[i][j]); //includes() returns a boolean
for(变量i=0;i
您直接将匹配值分配给a3,而应该将值推送到a3数组中

而不是这样做

a3 = a2[i][j];
这样做

a3.push(a2[i][j])
您可以使用
.concat()
.filter()
.includes()

说明:

  • 使用
    .concat()
    和`扩展语法创建一个包含所有子数组的所有元素的数组
  • 使用
    .Filter()
    筛选此数组,以仅选择通过筛选测试的元素
  • 可以使用
    .includes()
    检查其他数组中是否存在元素
演示:

让a1=[“5”,“10”],
a2=[“10”,“2”,“10”,“E”,“5”,“5”,“5”,“u”,“0”,“5”,“10”,“10”,“5”,“10”,“5”,“9”,“10”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“d”,“2”,“2”,“|”,“8”,“s”,“d”,“2”,“2”,“2”,“8”,“s”,“d”,“2”,“5”];
设a3=[].concat(…a2).filter(v=>a1.includes(v));
console.log(a3);

.as控制台包装{max height:100%!important;top:0;}
您正在将值插入数组。这应该是PUSH方法

如果您试图使用(a3=a2[i][j]),这将替换您以前的值。请使用推送方法进行插入。添加了下面的代码。 a3.推动(10)

push()方法将新项添加到数组的末尾。

您可以组合、array.prototype.concat()]和

// First we flatten the array to get rid of nested arrays
const flattened = a2.reduce((acc, val) => acc.concat(val), []);
// Then we loop through the flattened array and check if the current value (x) exists inside the a1 array - if true -> push to a3
flattened.map(x => a1.includes(x) && a3.push(x))
代码:

常量a1=[“5”,“10”]; 常数a2=[“10”,“2”,“10”,“E”,“5”,“5”,“u”,“0”,“5”,“10”,“5”,“5”,“10”,“9”,“10”,“10”,“5”,“5”,“l”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“d”,“2”,“2”,“|”,“8”,“s”,“d”,“2”,“z”,“8”,“s”,“d”,“2”,“5”]; 常数a3=a2 .减少((a,c)=>a.concat(c),[]) .过滤器(项目=>a1.包括(项目)); console.log(a3);您可以使用和(*ES6)来实现所需的结果

ES5

var a1=[“5”,“10”];
a2=[“10”,“2”,“10”,“E”,“5”,“5”,“5”,“u”,“0”,“5”,“10”,“10”,“5”,“10”,“5”,“9”,“10”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“5”,“d”,“2”,“2”,“|”,“8”,“s”,“d”,“2”,“2”,“2”,“8”,“s”,“d”,“2”,“5”];
var mergerResult=a2.reduce(函数(r,v){
返回r.concat(v);
}, []);
mergerResult=mergerResult.filter(函数(值){
返回a1.包括(值)
});

console.log(mergerResult,'lenght',mergerResult.length);
预期输出是什么?要打印a3并获取ITA的长度,请添加一些代码功能的描述,这就是修复方法,这样人们会更好地理解,您将避免否决票。
// First we flatten the array to get rid of nested arrays
const flattened = a2.reduce((acc, val) => acc.concat(val), []);
// Then we loop through the flattened array and check if the current value (x) exists inside the a1 array - if true -> push to a3
flattened.map(x => a1.includes(x) && a3.push(x))