从数组中调用的函数向数组中添加多个元素?

时间:2015-11-17 20:50:21

标签: javascript arrays function

这可能是一个非常简单的问题,可能之前已经得到了回答,但我已经研究过了,我找不到任何东西。如果我运行以下代码:

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']

谢谢,

3 个答案:

答案 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)

您可以使用Array.prototype.reduce()

  

reduce()方法对累加器和数组的每个值(从左到右)应用函数以将其减少为单个值。

Array.prototype.concat()

结合使用
  

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>');

或使用Array.prototype.map()

  

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;
}