Cum se implementează manual funcția join fără join-ul nativ din javascript? (Programare, Javascript, Array-Uri, Funcție, Separator)

Jun Kun a intrebat.

Sunt un începător în javascript și iată cele 5 probleme de codare cu care mă confrunt.

1.Declară o variabilă numită myName și atribuie o matrice populată cu două șiruri de caractere: 1) prenumele și 2) numele de familie.

2.Declară o funcție numită join care poate primi două intrări: 1) un array și 2) un șir de separare. Șirul separator este opțional.

3.join concatenează toate elementele din array-ul de intrare cu șirul de intrare și returnează rezultatul. Rezultatul funcției join este întotdeauna un șir de caractere.

4.Dacă nu se furnizează niciun separator, separatorul implicit trebuie să fie un șir de caractere spațiu ‘ ‘. Dacă nu este furnizat niciun array de intrare sau dacă array-ul este gol, join ar trebui să returneze un șir gol „”.

5.Nu puteți utiliza metoda join încorporată pentru array-uri și vă recomandăm să evitați alte metode încorporate.


// Am scris câteva coduri de mai jos până acum și se pare că am rezolvat 1~3. Cu toate acestea, nu am niciun indiciu pentru a rezolva 4 și 5. Cum pot să le rezolv?

// Mesajul de eroare a spus: Funcția join ar trebui să folosească în mod implicit un spațiu atunci când nu este furnizat un separator și ar trebui să returneze un șir gol dacă nu este furnizat niciun array

var myName = ["FirstName", "LastName"];

function join(arr,sep) {
  result = arr.join(sep);
  return result;
};

Comentarii

  • ` function join(arr=[],sep=’ ‘ ‘) { let res = arr[0] || ”; for(let i=1;i<arr.length; i++){ result += ${sep}${arr[i]}; } } return result; }; }; ` Ps: Întrebarea de temă nu este binevenită în stackoverflow. –  > Por ahuigo.
  • @ahuigo nu există o politică oficială (pe care să o pot găsi cel puțin) care să interzică întrebările de temă pentru acasă. Deși aș recomanda să faceți doar o aluzie la o soluție sau să oferiți resurse pentru student în loc să oferiți o soluție completă. Dacă se oferă o soluție, aceasta ar trebui să fie explicată astfel încât studentul să învețe ceva, motiv pentru care am votat răspunsul lui Moosa Saadat –  > Por backcab.
  • @backcab Îmi cer scuze pentru decizia mea arbitrară. Am editat această întrebare cu un titlu mai lămurit. Întrebarea de utilitate nu este binevenită, nu este o întrebare de temă pentru acasă. –  > Por ahuigo.
4 răspunsuri
Moosa Saadat

4) Puteți seta o valoare implicită pentru parametru, care va fi utilizată atunci când nu este transmisă nicio valoare:

function join(arr = [], sep = '') {
  if (arr.length === 0) {
        return "";
  }
};

5) Dacă nu puteți utiliza metoda încorporată, puteți scrie singur codul de îmbinare:

function join(arr, sep = '') {
  var result = "";
  for (let i = 0; i < arr.length - 1; i++) {
        result += arr[i];
        result += sep;
  }
  result += arr[arr.length - 1];
  return result;
};

Mister Jojo

pur și simplu că ?

Comentarii

  • partea 5 spune să nu folosiți funcția join încorporată –  > Por backcab.
Aplet123
var myName = ["firstName", "lastName"];
// note the sep = " ", this is JS's default value syntax
// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters
function join(arr, sep = " ") {
    // if arr is not an instance of an array
    // then we return an empty string as per the specs
    if (!(arr instanceof Array)) {
        return "";
    }
    // initialize the final string to an empty string
    var ret = "";
    // standard for loop for iterating through an array
    for (var i = 0; i < arr.length; i++) {
        // add the array element to the end of the return string
        // equivalent to ret = ret + arr[i]
        ret += arr[i];
        // if i is arr.length - 1, it's the last element of the array
        // so we don't want to add the separator
        if (i != arr.length - 1) {
            // but since it's not arr.length - 1 in this if statement
            // we can add the separator
            ret += sep;
        }
    }
    // we return the actual string
    return ret;
}

Comentarii

  • Aș spera că generozitatea comentariilor este suficientă pentru a învăța. În cel mai rău caz, OP măcar trebuie să depună efort pentru a șterge comentariile, caz în care e regretabil că depune efort activ pentru a nu învăța nimic. –  > Por Aplet123.
  • Acest lucru este adevărat, sperăm că vor obține o înțelegere din eforturile tale! –  > Por segFault.
Sl4rtib4rtf4st

În funcția dvs. utilizați metoda join array. Dacă sunteți sigur că acel arr va avea întotdeauna doar două elemente, atunci ați putea folosi pur și simplu caracterul de concatenare a șirurilor de caractere +, astfel:

arr[0] + arr[1]

Pentru a o face mai robustă, ați putea face o buclă peste elementele arr și să adăugați fiecare element la ieșirea rezultată.

// Devine a variable to output
let output = '';
// Loop over the array elements
arr.forEach(el => {
  // Add eacht element to the existing output
  // The 'sep? sep + el: ' ' + el;' part checks if there is a seperator, if not add a space
  output += sep? sep + el: ' ' + el;
});

Metoda de mai sus va funcționa numai dacă există deja un element adăugat la arh. outputva trebui să adăugăm o a doua verificare pentru a vedea dacă rezultatul este încă un șir gol.

Funcția completă ar arăta cam așa:

function join(arr, sep = '') {
  let output = '';
  arr.forEach(el => {
    if (output == '') {
      output += el;
    } else {
      output += sep? sep + el: ' ' + el;
    }
  });
  return output;
}

Apoi, acesta ar fi rezultatul:

var myName = ["FirstName", "LastName"];
join(myName, ', ') // 'FirstName, LastName'