提取数组之间的匹配值并将其保存到javascript中的新数组中
我对编程非常陌生,我正在尝试完成以下练习: 声明一个新变量以存储从a2提取的所有a1。 迭代所有a2的元素,只提取与a1中的值匹配的元素提取数组之间的匹配值并将其保存到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
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;i console.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;i console.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))