Duvida em Push e Shift
Gente, boa tarde Podem por favor me ajduar numa duvida ?
A questão é: Escreva uma função nextInLineque receba um array ( arr) e um número ( item) como argumentos.
Adicione o número ao final da matriz e remova o primeiro elemento da matriz.
A nextInLinefunção deve então retornar o elemento que foi removido.
A resposta é:
function nextInLine(arr, item) { // Only change code below this line arr.push(item); const removed = arr.shift(); return removed; return item; // Only change code above this line }
// Setup let testArr = [1, 2, 3, 4, 5];
// Display code console.log("Before: " + JSON.stringify(testArr)); console.log(nextInLine(testArr, 6)); console.log("After: " + JSON.stringify(testArr));
Adicionei o arr.push e arr.shift e deu certo mas eu fiz e não entendi o porque funcionou kkkk Podem me ajudar por favor ?
chegou a buscar a documentação para entender o que o método faz?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift
dica: para formatar seu código, use 4 ` acima e abaixo do código, ai fica assim:
function nextInLine(arr, item) {
// Only change code below this line
arr.push(item);
const removed = arr.shift();
return removed;
return item;
// Only change code above this line
}
// Setup
let testArr = [1, 2, 3, 4, 5];
// Display code
console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr, 6));
console.log("After: " + JSON.stringify(testArr));
A resposta é:
function nextInLine(arr, item) { // Only change code below this line arr.push(item); const removed = arr.shift(); return removed; return item; // Only change code above this line }
Apesar de ter "funcionado", eu não diria que está totalmente certo. Isso porque a função tem dois return
, o que não faz sentido. Quando ela encontra o primeiro return
, ela já retorna o valor e encerra a execução, então o segundo return
nunca será executado (o problema é que JS é bem permissivo com algumas coisas e não dá erro nesse caso).
Enfim, já te passaram os links da documentação (aqui e aqui). Mas pra resumir, push
adiciona um elemento no final do array, e shift
remove o primeiro elemento e o retorna. Por exemplo:
let array = [1, 2, 3, 4, 5];
array.push(6); // adiciona o 6 no final
console.log(array); // [ 1, 2, 3, 4, 5, 6 ]
let primeiro = array.shift(); // remove o primeiro elemento
console.log(primeiro); // 1
console.log(array); // [ 2, 3, 4, 5, 6 ]
Sendo assim, o exercício pede que um elemento seja adicionado no final, e depois que o primeiro seja removido e retornado. Então poderia ser apenas:
function nextInLine(arr, item) {
arr.push(item);
return arr.shift();
}
E só. Como shift
remove o primeiro elemento e o retorna, eu posso retornar este valor diretamente, sem precisar de variáveis intermediárias.
Testando:
function nextInLine(arr, item) {
arr.push(item);
return arr.shift();
}
let array = [1, 2, 3, 4, 5];
// adiciona o 6 no final e remove o primeiro elemento
let primeiro = nextInLine(array, 6);
console.log(primeiro); // 1
console.log(array); // [ 2, 3, 4, 5, 6 ]