https://www.google.com/recaptcha/api.js
我这样做对吗?还是我错过了标记?
你怎么解决这个问题?
答案 0 :(得分:3)
以下是如何执行此操作的示例。
function printEvens(array) {
var i;
for (i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
printEvents(array[i]);
continue;
}
if (array[i] % 2 == 0) {
console.log(array[i]);
}
}
}
printEvens([[1, 2, 3], [4, 5, 6], [7, 8], [9, 10, 11, 12], [[[13, [14]]]]]);
答案 1 :(得分:1)
我会使用reduce和filter来实现你需要的东西:
let yourArray = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
let evenNumbers = yourArray.reduce((prevVal,currVal)=>{
let value = currVal.filter(val => val%2===0);
prevVal.push(...value);
return prevVal;
}, [])
答案 2 :(得分:0)
var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
for(var key1 in nestedArr){
var item_nestedArr=nestedArr[key1];
for(var key2 in item_nestedArr){
if(item_nestedArr[key2] % 2 == 0){
console.log(item_nestedArr[key2]);
}
}
}
答案 3 :(得分:0)
<强>问题强>
问题在于内循环。你获得整个数组的string
表示,然后split
并获得另一个数组:
var arr = nestedArr.toString().split(',');
它们已经是数组,不需要拆分。您可以直接访问所需的位置。拆分后,您将此数组作为指定2个索引的2D数组访问:
console.log(arr[i][j]);
如果你只是split
它,它只有1维,因为split
总是返回1D数组。
自己查看split
结果:
var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
console.log(nestedArr.toString().split(','));
&#13;
同样测试i % 2 == 0
只会显示主阵列的位置/索引,而不是子阵列。
<强>解决方案强>
只有if
和console.log
需要调整才能发挥作用:
var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
function printEvens() {
for(var i = 0; i < nestedArr.length; i++) {
for(var j = 0; j < nestedArr[i].length;j++){
//no splitting just accessing directly the correct indexes
if(nestedArr[i][j] % 2 == 0){
console.log(nestedArr[i][j]); //nestedArr instead of arr
}
}
}
}
printEvens();
&#13;
一个更有趣的解决方案是使用带有forEach
的双Arrow Functions,这使得它成为一个班轮:
var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
nestedArr.forEach(x => x.forEach(y => { if (y % 2 == 0) console.log(y); }));
&#13;
免责声明:最后提出的解决方案使用ES6语法,如文档链接
所示答案 4 :(得分:0)
虽然问题有点含糊不清。 @Barmar是对的。您可以简单地将迭代器增加2。
function printEvens() {
for(var i = 0; i < nestedArr.length; i += 2) {
for(var j = 0; j < nestedArr[i].length; j++){
console.log(nestedArr[i].toString(););
}
}
}
答案 5 :(得分:0)
这里需要一个展平算法。如果您可以使用开源库,lodash.flattenDeep可以提供帮助。否则你可以这样做:
var nestedArr = [[1,2,3],[4,5,6],[7,8],[9,10,11,12]];
function flatten(ary) {
return ary.reduce(
(flattened, e) =>
e.constructor === Array ?
flattened.concat(flatten(e)) :
flattened.concat([e]),
[]
);
}
console.log(flatten(nestedArr).filter(n => n % 2 === 0));