2016-10-03 3 views
0

Я пытаюсь скопировать массив, однако у меня возникают проблемы. Я пробовал это по-разному, но никто не работает.Ошибки при попытке скопировать массив

первая попытка:

function classA(id, arrayFrom, arrayTo) 
{ 
    this.id = id; 
    this.from = arrayFrom.slice(0); 
    this.to = arrayTo.slice(0); 
}; 

Выход:

Uncaught TypeError: arrayFrom.slice is not a function

вторая попытка:

function classA(id, arrayFrom, arrayTo) 
{ 
    this.id = id; 
    this.from = {arrayFrom[0], arrayFrom[1], arrayFrom[2]}; 
    this.to = {arrayTo[0], arrayTo[1], arrayTo[2]}; 
}; 

Выход:

Uncaught SyntaxError: Unexpected token [

+2

Неиспользуемые детали. Поделитесь кодом с вызовами этой функции. –

+2

Методы в порядке, независимо от того, что вы им передаете, они не массивы – Yoda

+2

'arrayFrom' - это * не * массив. Пожалуйста, покажите нам, что это на самом деле. –

ответ

-1
function classA(id, arrayFrom, arrayTo){ 
    this.id = id; 
    this.from = arrayFrom.slice(0, arrayFrom.length); 
    this.to = arrayTo.slice(0, arrayTo.length); 
} 

Давайте попробуем с этим :) Но ваши функции не копировать массив ... я просто пишу прямо код;)

+0

"* arrayFrom.slice не является функцией *" –

+0

Кажется, что он не передает массив: \ –

0

Вы можете инициализировать экземпляр с реальными массивами. Затем он работает без ошибок.

function classA(id, arrayFrom, arrayTo) { 
 
    this.id = id; 
 
    this.from = arrayFrom.slice(0); 
 
    this.to = arrayTo.slice(0); 
 
} 
 

 
var aFrom = [1, 2, 3], 
 
    aTo = [42, 43, 44], 
 
    a = new classA(0, aFrom, aTo); 
 

 
aFrom[0] = 100; 
 
console.log(a); // the instance does not change to 100

0

Если вы звоните ClassA с «массив как» итерацию аргументы, например, список узлов, например, то вы можете сделать, как this.from = Array.from(arrayFrom).

function ClassA(id, arrayFrom, arrayTo) { 
 
    this.id = id; 
 
    this.from = Array.from(arrayFrom); 
 
    this.to = Array.from(arrayTo); 
 
} 
 

 
var obj = new ClassA(1,{0:"a",1:"b",length:2},{length:0}); 
 
console.log(obj);

Array.from() работает даже в комплекте поставки объект не имеет итератора, но только length свойства.

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