#javascript #return
Вопрос:
Почему это НЕ работает в Javascript:
function removeSmallest(numbers) {
var min = Math.min(...numbers);
return numbers.splice(numbers.indexOf(min), 1);
}
но это ДЕЛАЕТ???
function removeSmallest(numbers) {
var min = Math.min(...numbers);
numbers.splice(numbers.indexOf(min), 1);
return numbers;
}
Я действительно смущен заявлением о возврате, кроме того, что знаю, что оно мне нужно.
Комментарии:
1. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
2. Проблема не
return
в этом . Проблемаsplice()
в том . Внимательно прочитайте документы и поймите, какsplice()
это работает3. Мне кажется, что я использую splice() точно так же, как здесь, поэтому я не вижу разницы
4. О, я вижу, в первом я возвращаю массив сращивания, а не числа
5. Итак, я получаю массив [min] против массива [всего остального], это правильно?
Ответ №1:
Обе написанные вами функции являются допустимыми javascript, и на самом деле есть третий вариант, в котором даже не используется оператор return. Если вы соединяете массив, который вы передали, у вас уже есть результирующий массив. Считать:
function removeSmallest1(numbers) {
var min = Math.min(...numbers);
return numbers.splice(numbers.indexOf(min), 1);
}
function removeSmallest2(numbers) {
var min = Math.min(...numbers);
numbers.splice(numbers.indexOf(min), 1);
return numbers;
}
function removeSmallest3(numbers) {
var min = Math.min(...numbers);
numbers.splice(numbers.indexOf(min), 1);
}
let args1 = [1, 3, 5, 7];
let args2 = [1, 3, 5, 7];
let args3 = [1, 3, 5, 7];
console.log("function1 input:", JSON.stringify(args1), "output:", JSON.stringify(removeSmallest1(args1)));
console.log("function2 input:", JSON.stringify(args2), "output:", JSON.stringify(removeSmallest2(args2)));
console.log("function3 input:", JSON.stringify(args3), "output:", JSON.stringify(removeSmallest3(args3)));
console.log("After calling functions, original arrays:");
console.log(JSON.stringify(args1)); // [3, 5, 7]
console.log(JSON.stringify(args2)); // [3, 5, 7]
console.log(JSON.stringify(args3)); // [3, 5, 7]
Обратите внимание, что в каждом случае исходный массив изменяется путем вызова функции для него. Разница в возвращаемом значении обусловлена тем, как работает сращивание в Javascript. Из документации следует, что возвращаемое значение splice равно:
Массив, содержащий удаленные элементы. Если удаляется только один элемент, возвращается массив из одного элемента. Если элементы не удалены, возвращается пустой массив.
Вызывая return numbers.splice(numbers.indexOf(min), 1)
, вы указываете функции, чтобы она возвращала значение, возвращаемое splice
.