-3

これは非常に奇妙な問題であり、どうすればよいか本当にわかりません。

json_encode を使用して MySQL データベースから配列ワーカーを取得し、それを他の 2 つの配列にコピーして、すぐに操作を行います。

var workers = <?php echo json_encode($tablica_pracownikow); ?>;
var toSort = workers;
var sort = workers;

次に、ワーカー配列を表示する関数 drawForFirst があります

function drawForFirst(){
  for (var i=0; i<7; i++){
      $('.main_element').append(workers[i][0]);
      $('.main_element').append(workers[i][1]);
      $('.main_element').append(workers[i][2]);
      $('.main_element').append(workers[i][3]);
      $('.main_element').append(workers[i][4]);
      $('.main_element').append(workers[i][5]);
      $('.main_element').append(workers[i][6]);
}    

3 つの配列すべてに対して 3 つの同様の関数があります。

しかし、データの1行を0に変更するなど、配列の1つを変更してから、他の描画関数を使用すると、すべてのテーブルが同じように表示されます。toSort に変更を加えて、並べ替えを描画したい場合、toSort からの変更が表示されます。

何が起こっている!?!

4

2 に答える 2

2

それが配列の場合は、配列のコピーを返すために使用できslice()ます。現在、3 つの変数すべてで同じ配列を参照しているためです。

var workers = <?php echo json_encode($tablica_pracownikow); ?>;
var toSort = workers.slice(0);
var sort = workers.slice(0);

もちろん、JSON を各変数にエコーすることもできます。

var workers = <?php echo json_encode($tablica_pracownikow); ?>;
var toSort  = <?php echo json_encode($tablica_pracownikow); ?>;
var sort    = <?php echo json_encode($tablica_pracownikow); ?>;

確かにまったく同じ内容の 3 つの異なる配列が作成されますが、JSON 文字列の長さによってはslice()、同じ文字列を 3 回解析するよりも効率的である可能性がありますが、とにかく違いに気付くことはないでしょう。

于 2013-06-15T21:27:13.860 に答える
1

新しい配列を作成しているのではなく、同じ配列への新しい参照を作成しているだけです

これを行うと、配列を異なる変数にコピーできます-

var workers = <?php echo json_encode($tablica_pracownikow); ?>;
var toSort = workers.slice(0);
var sort = workers.slice(0);
于 2013-06-15T21:27:41.243 に答える