2017-11-26 6 views
0

jQuery配列に問題があります。jQueryが新しい配列を作成しました

2つの異なる配列が必要です。この状況で

var main_array = [] 

function create_array(){ 

    main_array[0] = {id: 1, status: true, number: 10}; 
    main_array[1] = {id: 1, status: true, number: 16}; 
    main_array[2] = {id: 1, status: true, number: 20}; 

} 

function change(array, key, number){ 

    array[key].number = number 

} 

create_array() 

new_array = change(main_array, 0, 20); 

console.log(main_array) 

私は、$ main_array配列に要素を追加し、私は番号を変更し、新しい配列を作成したいが、私は私のmain_arrayがに変更され、変更関数を呼び出すとき。

main_array番号を変更したくありません。私が間違って

+4

なぜあなたは非jQueryの変数に接頭辞としてドル兆しを使用していますか?あなたのコードにはjQueryを全く使用していません。 –

+2

test()とは何ですか? – baao

+1

配列のコピーを希望し、値を変更しますか? –

答えて

1

配列をやってんだよ

はオブジェクトであり、あなたが関数にオブジェクトを渡すとき、あなたはオブジェクトではなく、オブジェクトのコピーのメモリ位置への参照を渡しています。したがって、受信関数が入力引数を変更すると、元のオブジェクトが変更されます。あなたの配列がオブジェクトが含まれているため

、彼らはあまりにも基礎となるオブジェクトのメモリ位置への参照として渡され、あなたは、配列内の各オブジェクトのコピーを作成する必要があります。これはObject.assign()で行われます。

また、識別子の前にドル記号を付けることは、識別子がJQueryでラップされたセットオブジェクトへの参照を保持することを示すための規則と見なされます。コード内のどこにでもJQueryを使用していないので、それらを削除することをお勧めします。

var main_array = []; // <-- This is where the main array will go 
 
var newArray = []; // <-- This will be where the copied array goes 
 

 
function create_array(){ 
 

 
    main_array[0] = {id: 1, status: true, number: 10}; 
 
    main_array[1] = {id: 1, status: true, number: 16}; 
 
    main_array[2] = {id: 1, status: true, number: 20}; 
 
    
 
    return main_array; 
 
} 
 

 
function change(array, key, number){ 
 
    // Loop thorugh the original array: 
 
    main_array.forEach(function(obj){ 
 
    // Make a copy of the objects in the array and put them in the new array 
 
    newArray.push(Object.assign({}, obj)); 
 
    }); 
 
    newArray[key].number = number 
 
} 
 

 
main_array = create_array(); 
 

 
change(main_array, 0, 20); 
 

 
console.log(main_array, newArray)

+0

@sinisakeちょうど私がそれを書いた。 –

+0

最初のデモ/出力で両方の配列が変更されてしまったので、混乱しました。:) – sinisake