这可能是一个非常简单的问题,可能之前已经得到了回答,但我已经研究过了,我找不到任何东西。如果我运行以下代码:
function addElements(arg1,arg2){
return ['b','c'];
}
var arr = ['a',addElements('foo','bar'),'d'];
alert(JSON.stringify(arr));
然后我得到一个这样的数组:
['a',['b','c'],'d']
如何让它像这样创建一个单维数组
['a','b','c','d']
谢谢,
乔
答案 0 :(得分:2)
如果您坚持保留此格式,可以使用concat
:
var arr = ['a'].concat(function(){
return ['b','c'];
}(), 'd');
alert(JSON.stringify(arr));
更清洁的方法和解释:
// initial array
var arr = ['a'];
// use your function to add data to array
arr = arr.concat(function(){
return ['b','c'];
}());
// add more values
arr.push('d');
答案 1 :(得分:2)
结合使用
reduce()
方法对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。
concat()
方法返回一个新数组,该数组由调用它的数组组成,并与作为参数提供的数组和/或值连接。
var arr = ['a', function () { return ['b', 'c']; }(), 'd'],
arr2 = arr.reduce(function (r, a) {
return r.concat(a);
}, []);
document.write('<pre>' + JSON.stringify(arr2, 0, 4) + '</pre>');
map()
方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。
var arr = ['a', function () { return ['b', 'c']; }(), 'd'],
arr2 = [];
arr.map(function (a) {
arr2 = arr2.concat(a);
});
document.write('<pre>' + JSON.stringify(arr2, 0, 4) + '</pre>');
答案 2 :(得分:0)
我假设您要求一个包含阵列内部数组的数据结构的通用解决方案,并且您想要将其展平。
如果是这种情况,你基本上需要一个递归方法,即:
function flattenArr(arr) {
var outArr = [];
for (var i = 0; i < arr.length; ++i) {
if (Array.isArray(arr[i])) {
outArr = outArr.concat(flattenArr(arr[i]));
} else {
outArr.push(arr[i]);
}
}
return outArr;
}