2014-12-11 3 views
0

Это в 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] 

... и т. Д.

+0

использовать 'double' как переменное имя? Это зарезервированное слово в стандарте ECMAScript 1 ~ 3. См. [This] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar) – Raptor

+1

Вы просто суммируете некоторые элементы массива ... Вам нужно (1) выполнить итерацию по массиву (2), вставить обнаруженный элемент дважды в другой массив (3à), вернуть вновь построенный массив. Параметр 'array' является тем, для которого выполняется итерация, и вы должны построить локальный с другим именем, например' myDoublingArray', напишите код, предложив вам и 'return myDoublingArray'. –

+1

http://stackoverflow.com/questions/12503146/create-an-array-with-same-element-repeated-multiple-times-in-javascript – Paul

ответ

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

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

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.

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); 
} 
+1

Ваш простой однострочный слот будет разбит, если какие-либо из значений исходного массива содержат запятые. – JLRishe

+0

@JLRishe OP пропускает числа. –

+0

Это не означает, что OP всегда будет передавать числа. И даже если это все числа, значения в массиве результатов будут строками. Это на самом деле не соответствует удвоению всех значений массива. – JLRishe

1

Я немного изменил вашу функцию.

Идея состоит в том, чтобы .push(item) в другой массив ДВАЖДЫ.

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

6

Путь с reduce, возможно, самый короткий

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

Очень красивый подход. +1 – JLRishe

0

Помимо всех способов сделать это с чистым JavaScript, который вы можете найти в других ответах, вы могли бы использовать например, underscore или lo-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() просто разворачивает его с объекта, чтобы вы могли его использовать.

Смежные вопросы