我对编程很陌生,我正在尝试完成以下练习:
声明一个新变量来存储从a2中提取的所有a1。 迭代所有a2的元素,只提取与a1中的值匹配的元素。
var a1 = ["5", "10"];
var a2 = [
["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"],
["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"],
["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]
];
var a3 = [];
for (var i = 0; i < a2.length; i++) {
for (var j = 0; j < a2[i].length; j++) {
if (a1[0] === a2[i][j] || a1[1] === a2[i][j]) {
a3 = a2[i][j];
console.log(a3);
} else {
console.log("false")
}
}
}
console.log(a3)
目前,我有这段代码。当我在循环外检查a3时,我没有达到我的预期。如何获取匹配值以进入这个新数组(a3)?
答案 0 :(得分:0)
您需要a3.push
来添加数组中的元素
var a1 = ["5", "10"];
var a2 = [
["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"],
["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"],
["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]
];
var a3 = [];
for (var i = 0; i < a2.length; i++) {
for (var j = 0; j < a2[i].length; j++) {
if (a1[0] === a2[i][j] || a1[1] === a2[i][j]) {
a3.push(a2[i][j]);
} else {}
}
}
console.log(a3);
或者您可以使用indexOf
&amp; forEach
var a1 = ["5", "10"];
var a2 = [
["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"],
["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"],
["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]
];
var a3 = [];
a1.forEach(function(item) {
if (a1.indexOf(item) !== -1) {
a3.push(item)
}
})
console.log(a3);
答案 1 :(得分:0)
问题是你没有向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
答案 2 :(得分:0)
您是直接将匹配值分配给a3,而不是将数据推送到a3数组中。
而不是这样做
a3 = a2[i][j];
这样做
a3.push(a2[i][j])
答案 3 :(得分:0)
您可以使用.concat()
,.filter()
和.includes()
:
let a3 = [].concat(...a2).filter(v => a1.includes(v));
说明强>
.concat()
和`spread syntax。.filter()
过滤此数组,仅选择那些通过过滤器测试的元素。.includes()
检查其他数组中元素的存在。<强>演示:强>
let a1 = ["5", "10"],
a2 = [["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"],["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"],["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]];
let a3 = [].concat(...a2).filter(v => a1.includes(v));
console.log(a3);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<强>文档:强>
答案 4 :(得分:0)
您正在将值插入数组。这应该是PUSH方法。
如果您尝试使用(a3 = a2 [i] [j]),这将替换您之前的值。请使用push方法插入。添加了以下代码。 a3.push(10)
push()方法将新项添加到数组的末尾。
答案 5 :(得分:0)
// 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))
答案 6 :(得分:0)
您可以合并Array.prototype.reduce(),Array.prototype.concat()] 3,Array.prototype.filter()和Array.prototype.includes()。
代码:
const a1 = ["5", "10"];
const a2 = [["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"], ["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"], ["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]];
const a3 = a2
.reduce((a, c) => a.concat(c), [])
.filter(item => a1.includes(item));
console.log(a3);
答案 7 :(得分:0)
您可以使用filter()
,reduce()
,includes()
和Spread syntax
(* ES6)来获得所需的结果。
ES5
var a1 = ["5", "10"];
a2 = [["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"],["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"],["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]];
var mergerResult = a2.reduce(function(r, v){
return r.concat(v);
}, []);
mergerResult = mergerResult.filter(function(value){
return a1.includes(value)
});
console.log(mergerResult,'lenght',mergerResult.length);
ES6
const a1 = ["5", "10"];
a2 = [["10", "2", "10", "E", "5", "5", "u", "0", "5", "10", ":", "5"],["10", "10", "5", "9", "10", "}", "5", "l", "5", "5", "5", "˜"],["x", ".", "d", "2", "|", "[", "z", "8", "s", "d", "2", "5"]];
let mergerResult = a2.reduce((r, v) => [...v, ...r], []);
mergerResult = mergerResult.filter(value=>a1.includes(value));
console.log(mergerResult,'lenght',mergerResult.length);