Как создать новый массив с тем же содержимым?

#javascript #arrays #ecmascript-5

Вопрос:

Я использую внешнюю библиотеку для итерации по массиву. Он имеет next() функцию перехода к следующему элементу массива и возвращает false , если следующего элемента нет. Если next() вызывается в первый раз, то он возвращает первый элемент.

Но вот как это работает —

 var a = ['item1'];
a.next(); // 'item1' is returned
...
a = ['item1']; // it could be called several times
a.next(); // false is returned, but 'item1' is expected
 

Есть ли какой-либо способ сделать a так, чтобы функция обрабатывала массив как новый массив next() ?
Я попытался добавить новые элементы в a ( a.push(' ') ), и это работает хорошо, но тогда мне приходится иметь дело с пустыми элементами массива.

Комментарии:

1. Не зная, какую библиотеку вы используете и как это работает, практически невозможно сказать вам, как использовать ее должным образом.

2. @VLAZ, я добавил ссылку. Боюсь, это не поможет — исходный код недоступен.

3. Вы можете использовать a.first() для получения первого элемента и a.next() последующего за ним.

4. @NiettheDarkAbsol, я не использую a.first() в настоящее время и всегда использую a.next , так как использование a.first() усложнит код. (это не чистый код, я строю the code из блоков)

Ответ №1:

Если это одномерный массив, вы, вероятно, могли бы сделать что-то вроде:

 let newArray = [...oldArray];
 

Это создаст новый массив.

Могу я спросить вас, почему вы используете внешнюю библиотеку для сопоставления с массивом?

Комментарии:

1. Спасибо. Могу ли я использовать newArray = [...'item1'] ? Я получаю следующую ошибку — Expected an operand but found .

2.вы можете использовать […[‘item1’]]. то, что вы предложили, приведет к [‘i’, ‘t’, ‘e’, ‘m’, ‘1’] [...[1], 2,3] = [1,2,3] {...{a:1, b: 2},c: 3} = {a:1,b:2, c:3}

3. Понял, спасибо. В любом случае, это не работает — возвращается та же ошибка. Вероятно, из-за ecmascript 5.

4. хммм, это действительно странно — я не уверен, почему библиотека будет ссылаться на это как на один и тот же массив. Попробуйте также переназначить переменную, так что: var a = [‘item’] … var a = новый массив (…a) Невозможно, чтобы это не разделяло массивы, если только вы не работаете с вложенным массивом, и в этом случае переназначается только верхний уровень. Если это не сработает, опубликуйте больше кода — желательно завершить реализацию в чем-то вроде codesandbox. напишите var еще раз — var можно переназначить. let и const не

Ответ №2:

Вы можете использовать оператор spread для создания мелкой копии этого массива.

 var a = [1,2,3];
var b = [...a];

a.push(4);

console.log("a = "   a);
console.log("b = "   b);