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