Простое клонирование/копирование массива в JavaScript
Чтобы клонировать/копировать содержимое массива, все, что вам нужно сделать, это вызвать метод slice, передав 0 в качестве первого аргумента:
var clone = myArray.slice(0);
Код выше создает копию исходного массива; имейте в виду, если в вашем массиве существуют объекты — они хранятся как ссылки; т.е. код выше не делает “deep” клонирование содержимого массива.
Чтобы добавить копирование, как нативный метод к массивам, вы могли бы сделать что-то вроде этого:
Array.prototype.clone = function () < return this.slice(0); >;
Давайте напишем рекурсивную функцию, чтобы копировать массив, который потенциально может иметь вложенные объекты или массивы:
function arrayClone (arr) < var i, copy; if (Array.isArray(arr)) < copy = arr.slice(0); for (i = 0; i < copy.length; i++) < copy[i] = arrayClone(copy[i]); >return copy; > else if (typeof arr === 'object') < throw 'Cannot clone array containing an object!'; >else < return arr; >>
Если вы используете Underscore – можете сделать это еще короче:
function arrayClone (arr) < if (_.isArray(arr)) < return _.map(arr, arrayClone); >else if (typeof arr === 'object') < throw 'Cannot clone array containing an object!'; >else < return arr; >>
С версии ECMAScript 2015 был введен метод Object.assign(), с его помощью глубокое клонирование можно реализовать еще проще:
var clone = Object.assign([], myArray);
Заключение
Если вам нужно глубокое копирование произвольно-вложенных объектов и/или массивов, крошечный node-clone прекрасно с этим справиться. Он будет правильно обрабатывать даже копирование объектов с циклическими ссылками!
Источники
- Clone Arrays with JavaScript
- How to Clone a (Nested) Array in Javascript
Как переместить объект из одного массива в другой?
при помощи функции, в которую входит какой то field .
Как можно это сделать?
- Вопрос задан более трёх лет назад
- 766 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2
Stockholm Syndrome @StockholmSyndrome
fieldsListInTotal.push(fieldsListInActive.find((item) => item.field === 'id'));
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Попробуй так
const findIndex = fieldsListInTotal.findIndex(i => i.field === field) if (findIndex !== -1)
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- JavaScript
- +1 ещё
Выгрузка JS кода в php, но не просто?
- 1 подписчик
- 5 часов назад
- 53 просмотра
- JavaScript
- +1 ещё
Насколько верно написана функция вывода цепочки прототипа?
- 1 подписчик
- 8 часов назад
- 66 просмотров
- JavaScript
- +1 ещё
Какой плагин для смены изображения при наведении использовать?
- 1 подписчик
- 9 часов назад
- 52 просмотра
- JavaScript
Как открыть только на текущий айтем в jq?
- 1 подписчик
- 15 часов назад
- 70 просмотров
- JavaScript
Как в кастомном Choices.js отрендерить чекбоксы?
- 1 подписчик
- 15 часов назад
- 39 просмотров
- JavaScript
- +1 ещё
Как извлечь ссылку?
- 1 подписчик
- 15 часов назад
- 76 просмотров
- JavaScript
- +1 ещё
Как прервать выполнение скриптов на стороннем сайте?
- 2 подписчика
- 17 часов назад
- 91 просмотр
- JavaScript
Почему не работает onclick?
- 2 подписчика
- вчера
- 85 просмотров
- JavaScript
Можно ли ещё сократить код?
- 1 подписчик
- вчера
- 139 просмотров
- JavaScript
- +1 ещё
Какая js-библиотека может распознавать русскую речь офлайн?
- 2 подписчика
- вчера
- 86 просмотров
от 150 000 до 300 000 ₽
от 200 000 до 600 000 ₽
Zaymigo • Нижний Новгород
30 окт. 2023, в 01:46
8000 руб./за проект
30 окт. 2023, в 01:42
10000 руб./за проект
30 окт. 2023, в 01:00
50000 руб./за проект
Минуточку внимания
Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями
- Установка Zabbix Agent на большое количество машин Windows без домена?
- 3 подписчика
- 1 ответ
- 2 подписчика
- 1 ответ
- 2 подписчика
- 0 ответов
- 2 подписчика
- 2 ответа
- 2 подписчика
- 1 ответ
- 1 подписчик
- 2 ответа
- 2 подписчика
- 0 ответов
- 2 подписчика
- 0 ответов
- 1 подписчик
- 2 ответа
- 2 подписчика
- 0 ответов
Как скопировать данные одного массива в другой js?
Которая по идее должна сохранять содержимое массива arr2 в массив arr1. Но она не работает и я не понимаю почему. Консоль тоже ни на что не ругается. Так же пробовал варианты вроде:
1. for (var i=0; i; 2. arr2.push(arr1); 3. arr2 = [].concat(arr1);
И еще несколько подобных комбинаций, но ни одна не сработала как надо. Что я делаю не так? Как заставить данные одного массива переместиться в другой? Содержимое массива arr1 (так он отображается в консоли в процессе чтения):
0: Cards accuracy: 30 attak: 10 attaktipe: "melee" defence: 5 dexterity: 50 health: 100 speed: 10 suits: "spearman" [[Prototype]]: Object 1: Cards accuracy: 80 attak: 15 attaktipe: "melee" defence: 10 dexterity: 30 health: 100 speed: 5 suits: "armoredman" [[Prototype]]: Object
Второй массив просто обьявлен, как переменная:
let arr2 = new Array();
Как скопировать один массив в другой java
Для копирования одного массива в другой в Java можно использовать метод System.arraycopy() или использовать цикл for для копирования каждого элемента в новый массив.
Пример использования System.arraycopy() :
int[] source = 1, 2, 3, 4, 5>; int[] destination = new int[source.length]; System.arraycopy(source, 0, destination, 0, source.length); System.out.println(Arrays.toString(destination )); // => [1, 2, 3, 4, 5]
Пример использования цикла for :
int[] source = 1, 2, 3, 4, 5>; int[] destination = new int[source.length]; for (int i = 0; i source.length; i++) destination[i] = source[i]; >