将项目数组减少到单个数组列表中

时间:2016-05-23 06:55:22

标签: javascript arrays

如果我想将项目减少到单个数组列表,那么下面是我的数组。

var input=[
    [
        2
    ],
    [
        3,
        13
    ],
    [
        4,
        14
    ],
    [
        5,
        15,
        25,
        35
    ]
]

var output=[
    2,
    3,
    13,
    4,
    14,
    5,
    15,
    25,
    35
]

我的代码:

  function reduceArray(item){
                  for(var i=0;i<item.length;i++){
                      return i;
                  }
              }
    var result=result.map((item)=>{
                   if(item.length>0){
                       return reduceArray(item);
                   }else{
                       return item;
                   }
               }) 

产生相同的结果。任何人都可以找出我做错的地方或任何其他方法来实现这一点。谢谢

5 个答案:

答案 0 :(得分:3)

input.reduce(function(a, x) { return a.concat(x); });
// => [2, 3, 13, 4, 14, 5, 15, 25, 35]

reduce将累加器设置为第一个元素(或者提供的起始值),然后使用累加器和每个连续元素调用该函数。我们提供的功能是连接。如果我们说input[a, b, c],则上述命令将等同于a.concat(b).concat(c)[concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat)通过将两个或多个数组压缩在一起来生成一个新数组。

编辑:实际上,还有另一种可能的答案:

Array.prototype.concat.apply(input[0], array.slice(1));
// => [2, 3, 13, 4, 14, 5, 15, 25, 35]

这会直接调用带有多个参数的concat;如果input再次为[a, b, c],则相当于a.concat(b, c)apply使用给定的接收者和参数调用函数; slice将只给出数组的一部分,在这种情况下,所有内容都从第一个元素开始(我们需要切断它,因为它需要成为concat调用的接收者)。

答案 1 :(得分:2)

一个班轮就是

input = [[2],[3,13],[4,14],[5,15,25,35]];
[].concat.apply([],input);

答案 2 :(得分:1)

您可以使用lodash's flattenDeep()

_.flattenDeep([1, [2, [3, [4]], 5]]);
// → [1, 2, 3, 4, 5]

答案 3 :(得分:1)

用户concat。查看此信息以获取更多信息http://www.w3schools.com/jsref/jsref_concat_array.asp

&#13;
&#13;
var input=[[2],[3,13],[4,14],[5,15,25,35]];
var output=[];
for(var i = 0; i < input.length; i++)
{
  output = output.concat(input[i]);
}
console.log(output);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 4 :(得分:1)

使用concat是完美的方式

  

concat()方法用于连接两个或多个数组。   此方法不会更改现有数组,但会返回一个新数组,其中包含已连接数组的值。

var newArr = [];
for(var i = 0; i < input.length; i++)
{
    newArr = newArr.concat(input[i]);
}

console.log(newArr);