如何获得数组和它的子数组的所有值
How to get all values out of array and its sub-arrays
我试图建立一个函数,将应用于一个数组,并将提取其所有值不是数组。
对于数组,它将再次执行相同的过程,直到第一个数组,它的子数组,子数组自己的子数组等中的所有值将被放入单个数组。
我面临的问题在于我事先不知道每个数组将有多少个子数组,等等。
我试过了:
我已经尝试使用 forEach()
如下所示,但正如我上面所说的,子数组的数量和值通常是未知的。我确信某种循环甚至递归会有所帮助,但我不能让它在我的脑海中工作。
function extract (value) {
var
result = [],
isArray = function (value) {
return value.constructor === Array;
}
if (isArray(value)) {
value.forEach(function (each) {
if (!isArray(each)) result.push(each);
else {
each.forEach(function (j) {
if (!isArray(each)) result.push(each);
else... // same as above
});
}
});
}
return result;
}
我相信使用 each = each[i]
就像我在DOM中寻找后代一样会有所帮助,但我不确定如何在这种情况下设置 while
循环以及终止条件应该是什么。
期望结果:
var array = [["a", 2, [3, "mn"], "bu"], "la", [12, 34, "ab"]]; // Just an example
var result = extract(array); // Outputs: ["a", 2, 3, "mn", "bu", "la", 12, 34, "ab"]
我如何修复我当前的代码,以实现上述预期的结果?
一个递归的解:
function extract( array, newarray ){
if( !newarray ) newarray = [] ;
if( array ) for( var i = 0 ; i < array.length ; ++i )
{
if( array[i].constructor.name === "Array" ) extract( array[i], newarray ) ;
else newarray.push( array[i] ) ;
}
return newarray ;
}
var array = [["a", 2, [3, "mn"], "bu"], "la", [12, 34, "ab"]]; // Just an
var newarray = extract(array); // Outputs: ["a", 2, 3, "mn", "bu", "la", 12, 34, "ab"]
console.log( newarray ) ;
您可以使用递归减少函数非常简单地做到这一点。
function flatten(arr) {
return arr.reduce(function(a, b) {
return a.concat(Array.isArray(b) ? flatten(b) : b);
}, []);
}
var arr = [["a", 2, [3, "mn"], "bu"], "la", [12, 34, "ab"]];
var result = flatten(arr);
console.log(result);
相关文章:
- javascript处理一个对象数组以获得一个新的对象数组
- 如何从字符串数组中获得8个随机唯一元素
- 如何从数组中获得唯一的结果
- 创建一个字节数组并获得相同的 Java 和 JavaScript 输出
- 在javascript中展平数组以获得最长的字符串
- Javascript 数组未获得总和.而不是检索数组本身
- 如何在数组中获得一个新的空对象
- 在循环数组后获得特定的结果模式
- 如何在grandCouncil数组中获得正确的对象变量名
- 如何通过使用Javascript比较两组数组来获得唯一对象
- 比较 JavaScript 对象数组以获得最小值/最大值
- 如何在Javascript中从字节数组中获得一个BigInteger
- 我如何从javascript数组中获得第二大元素
- JSON -如何在数组中获得特定的值
- 如何搜索一系列数组以获得特定匹配并显示结果
- 如何在Javascript中从数组中获得最大的五个值
- 使用Javascript有效地从坐标数组中获得距离最短的一对坐标
- 循环思考javascript / JQuery数组并获得'grand'总计
- 想要从json数组中获得一个特定的元素,
- 如何从数组中获得对象的特定值?