2016-04-25 3 views
1

Я хочу глубоко скопировать массив целых чисел в NodeJS. Первый метод, который я попробовал этоЭффективная глубокая копия в NodeJS

obj2 = JSON.parse(JSON.stringify(obj1)); 

Однако, это так медленно, потому что это большой массив.

Теперь я использую

var l = obj1.length; 
while (l--){ 
    obj2.push(obj1[l]); 
} 

Хотя это намного быстрее, мне интересно, если существуют более эффективные решения? Спасибо всем!

+2

Что именно делает «глубокая копия» простого массива интегралов означает? Какая разница с мелкой копией? – adeneo

+0

@adneo. Мне нужно использовать два разных массива (исходный порядок и отсортированные) –

+0

@LuyaoWang Почему бы просто не получить отсортированный массив? –

ответ

3

Если это массив, пытались ли вы просто

var arr2 = arr1.slice(0); 

Это создает неполную копию, но для массива, содержащего только примитивные целые числа не имеет значения.

+1

Аргументы среза [необязательно] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice), поэтому 'arr1.slice()' будет делать все отлично. –

+0

@ РоманПарадеев - и все же я решил добавить '0' в качестве аргумента, чтобы было ясно, что мы нарезаем с самого начала. – adeneo

+0

Почему бы не указать явно оба индекса? –

1

вы также можете сделать это, как

var arr = [1,2,3,4,5,6,7,8], 
    brr = arr.map(e => e); 
0

Если массив содержит только цифры (это не будет работать, если массив содержит массивы), вы можете использовать Array.prototype.slice функцию без аргументов

var arr1 = [1, 2, 3, 4, 5]; 
var arr2 = arr1.slice(); 
0

Если вам нужно получить отсортированный массив и сохранить информацию о положении элемента в исходном массиве:

0) Исходный массив:

var obj1 = [1, 2, 3, 100, 5, 0, 200, 30]; 

1) Необходимо сохранить исходную позицию:

var index = Object.keys(obj1).sort(function(a, b) { 
    return obj1[a] - obj1[b]; 
}); 

// >> ["5", "0", "1", "2", "4", "7", "3", "6"] 

2) Получить отсортированный массив:

var obj2 = obj1.sort(function(a, b) { 
    return a-b; 
}); 

// >> [0, 1, 2, 3, 5, 30, 100, 200] 

3) Найти исходное положение элемента с новым index '0':

var originalIndex = index[0]; 

// >> "5" 
Смежные вопросы