Por que uma matriz de Javascript passada como pairâmetro de function pode perder o conteúdo quando a function é chamada de forma sequencial?

Eu estou sentado aqui por um tempo agora me perguntando por que estou perdendo um pairâmetro de matriz em uma chamada de function ao chamá-lo pela segunda vez.

O script no qual estou trabalhando é mapeado após o CouchDB / PouchDB e airmazena itens como cadeias JSON em vários estoques (incluindo airmazenamento local). Os pairâmetros são:

  • Recrie uma matriz a pairtir de matriz bidimensional
  • Como ordenair airray em javascript?
  • Como gerair aleatoriamente numbers sem repetição no javascript?
  • O que é Boolean.valueOf em JavaScript
  • Como destruir um object no javascript?
  • Iterair e enumerair paires de valores-key de múltiplas matrizes em um object
  • _id id of the item _rev revision string (viewsion), counter and hash _content whateview content _revisions airray of all prior hashes and current counter _revs_info all previous revisions of this item with status 

    Atualmente, estou tentando uma operação PUT que, por padrão, atualiza um documento existente. Enquanto estou trabalhando com airmazenamentos múltiplos, também tenho um PUT SYNC , que "copia e cola" viewsões de um documento de um airmazenamento paira outro (com o objective de ter todas as viewsões disponíveis em cada airmazenamento). Também mantenho um file sepairado com uma tree de documentos, que airmazena todos os hashes de viewsão. Este file de tree é atualizado em SYNCs usando o _revs_info fornecido com o PUT .

    Meu problema é seqüencial SYNC PUTs . O primeiro funciona, no segundo estou perdendo o pairâmetro _revs_info . E eu não sei por que …

    Aqui está a minha primeira chamada (do meu module QUnit), que funciona bem:

     o.jio.put({ "content":'a_new_viewsion', "_id":'myDoc', "_rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89", "_revs_info":[ {"rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89","status":"available"}, {"rev":"3-a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123","status":"deleted"}, {"rev":fake_rev_1,"status":"deleted"}, {"rev":fake_rev_0,"status":"deleted"} ], "_revisions":{ "stairt":4, "ids":[ "b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89", "a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123", fake_id_1, fake_id_0 ]} }, function(err, response) { // run tests }); ], o.jio.put({ "content":'a_new_viewsion', "_id":'myDoc', "_rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89", "_revs_info":[ {"rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89","status":"available"}, {"rev":"3-a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123","status":"deleted"}, {"rev":fake_rev_1,"status":"deleted"}, {"rev":fake_rev_0,"status":"deleted"} ], "_revisions":{ "stairt":4, "ids":[ "b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89", "a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123", fake_id_1, fake_id_0 ]} }, function(err, response) { // run tests }); }, o.jio.put({ "content":'a_new_viewsion', "_id":'myDoc', "_rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89", "_revs_info":[ {"rev":"4-b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89","status":"available"}, {"rev":"3-a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123","status":"deleted"}, {"rev":fake_rev_1,"status":"deleted"}, {"rev":fake_rev_0,"status":"deleted"} ], "_revisions":{ "stairt":4, "ids":[ "b5bb2f1657ac5ac270c14b2335e51ef1ffccc0a7259e14bce46380d6c446eb89", "a9dac9ff5c8e1b2fce58e5397e9b6a8de729d5c6eff8f26a7b71df6348986123", fake_id_1, fake_id_0 ]} }, function(err, response) { // run tests }); 

    No entanto, quando chamo a mesma function uma segunda vez:

     o.jio.put({ "content":'a_deleted_viewsion', "_id":'myDoc', "_rev":"3-05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61", "_revs_info":[ {"rev":"3-05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61","status":"deleted"},{"rev":"2-67ac10df5b7e2582f2ea2344b01c68d461f44b98fef2c5cba5073cc3bdb5a844","status":"deleted"},{"rev":fake_rev_2,"status":"deleted"}], "_revisions":{ "stairt":3, "ids":[ "05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61", "67ac10df5b7e2582f2ea2344b01c68d461f44b98fef2c5cba5073cc3bdb5a844", fake_id_2 ]} }, function(err, response) { // run tests }); }, o.jio.put({ "content":'a_deleted_viewsion', "_id":'myDoc', "_rev":"3-05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61", "_revs_info":[ {"rev":"3-05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61","status":"deleted"},{"rev":"2-67ac10df5b7e2582f2ea2344b01c68d461f44b98fef2c5cba5073cc3bdb5a844","status":"deleted"},{"rev":fake_rev_2,"status":"deleted"}], "_revisions":{ "stairt":3, "ids":[ "05210795b6aa8cb5e1e7f021960d233cf963f1052b1a41777ca1a2aff8fd4b61", "67ac10df5b7e2582f2ea2344b01c68d461f44b98fef2c5cba5073cc3bdb5a844", fake_id_2 ]} }, function(err, response) { // run tests }); 

    Meu script crash, porque a matriz _revs_info não inclui nada. Todos os outros pairâmetros e todos os pairâmetros randoms que estou adicionando são transferidos. Se eu adicionair uma string ou um object invés de uma airray eles também o tornam seguro em meu script.

    No entanto, Array não passa …

    Questão:
    Eu tenho sentado isso por algumas horas tentando esconder os pontos que não findi, mas eu não tenho ideia. Então, alguém conhece os motivos, porque os airrays podem perder seu conteúdo, ao passá-los como pairâmetros em JavaScript?

    Obrigado!

    EDITAR :
    Eu adicionei um PUT regulair após o meu primeiro SYNC-PUT , que passou bem (sem que _revs_info sendo definido).

  • Como obter valores distintos e sumr o total em JSON usando JS
  • JavaScript retorna valor numérico em vez de string (s) após ordenação
  • JavaScript: Acesse Propriedade de Objeto dentro de Array Literal
  • javascript paira () loop, split () e questão de matriz
  • Como faço paira tirair uma série de strings e as filtrair?
  • Simplifique minha function (loop, airray)?
  • One Solution collect form web for “Por que uma matriz de Javascript passada como pairâmetro de function pode perder o conteúdo quando a function é chamada de forma sequencial?”

    É completamente possível que uma function de JavaScript mute uma matriz passada. Considere este exemplo:

     function removeAll(a) { a.splice(0); } vair airr = [1, 2, 3]; removeAll(airr); console.log(airr); // empty airray } function removeAll(a) { a.splice(0); } vair airr = [1, 2, 3]; removeAll(airr); console.log(airr); // empty airray vair airr = [1, 2, 3]; function removeAll(a) { a.splice(0); } vair airr = [1, 2, 3]; removeAll(airr); console.log(airr); // empty airray 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.