编写一个函数,使数组中的每个项目加倍

时间:2014-12-11 06:35:26

标签: javascript arrays function

这是在javascript中。 到目前为止,我有这个:

 var double = function (array) {
     var array = [];
     for(var i = 0; i<array.length; i++) {
         var sum = array[i] + array[i];
     }
     return sum;
};

......基本上,如果我进入这个区域:

var a = [1,2,3];

我希望函数返回:

[1,1,2,2,3,3]

...等

8 个答案:

答案 0 :(得分:7)

使用reduce的方式,可能是最短的

[1,2,3].reduce(function(m,i) { return m.concat([i,i]); }, []);

和ES6版本

[1,2,3].reduce((m,i) => m.concat([i,i]), []);

答案 1 :(得分:3)

这是一个简洁的方法:

function doubleValues(array) {
   return array.concat.apply([], array.map(function (el) { return [el, el] }));
}

console.log(doubleValues([1, 2, 3]));

或者更容易理解的方法:

function doubleValues(array) {
  var newArray = [];
  array.forEach(function (el) { newArray.push(el, el); });    
  return newArray;
}

console.log(doubleValues([1,2,3]));

答案 2 :(得分:2)

未经测试的代码,我对javascript并不太熟悉,所以这可能会有一些语法错误:

var duplicateArrayMembers = function (array) {
  var result = [];
  for (var i = 0; i < array.length; ++i) {
    result.push(array[i]);
    result.push(array[i]);
  }
  return result;
}

var myArray = [1, 2, 3];
document.write(duplicateArrayMembers(myArray));

首先,我们使用名为array的参数声明一个函数。因为array是一个参数,所以我们不需要在函数体中声明它。

接下来,我们声明数组,我们将把重复的结果放在哪里。我们简单地将其命名为result

接下来,我们遍历数组。对于数组的每个成员,我们push元素到结果的末尾。这意味着,如果第一个成员是1,我们会在第一步之后推送1两次不同的时间,最后是[1,1]

最后,在我们遍历数组之后,我们返回result

答案 3 :(得分:2)

这里有更简洁的方法。

function doubleArr(arr){
   var rtn = []; 
   return arr.forEach(function(x){ rtn.push(x, x); }), rtn;
}

调用它

console.log(doubleArr([1,2,3])); // [1, 1, 2, 2, 3, 3]

如果仅涉及数字数组,这里只是一个简单的单行。

function doubleArr(arr){
   return arr.map(function(x){ return [x,x]}).join().split(",").map(Number);
}

答案 4 :(得分:1)

试试这个:

var dob = function (array) {
    var test = [];
   for(var i = 0; i<array.length; i++) {
       var sum = array[i];
       test.push(sum);test.push(sum);
  }
   console.log(test);
  };

dob([1,2,3])

FIDDLE

答案 5 :(得分:1)

我稍微改变了你的功能。

想法是.push(item)到另一个数组TWICE。

&#13;
&#13;
function double(array) {
  var output = [];
  for(var i = 0; i < array.length; i++) {
    output.push(array[i]);
    output.push(array[i]);
  }
  return output;
};

var input = [1,2,3];

var output = double(input);

alert(output);
&#13;
&#13;
&#13;

答案 6 :(得分:0)

除了您可以在其他答案中找到的使用纯Javascript的所有方法之外,您可以使用underscorelo-dash等类似的库,在这种情况下您可以编写它为:

_.chain(array).map(function(x) {return [x,x]}).flatten().value()

chain函数会将您的数组包装在一个对象中,因此您可以在其上应用连续的函数。如果您从[1, 2, 3]开始,则map将返回[[1,1],[2,2],[3,3]]。之后flatten会将您的数组展平为[1,1,2,2,3,3],而value()只需将其从对象中展开,以便您可以使用它。

答案 7 :(得分:0)

这对我有用:

给出一个整数数组,返回一个新数组,每个值加倍。

例如:

[1、2、3]-> [2、4、6]

对于初学者,请尝试使用map方法-它非常方便,因此是一个很好的认识。

function maps(integers) {
return integers.concat.apply([],
integers.map(function (n) { 
return [n*2] }));
};