#javascript
Функция partitionOn принимает 2 аргумента, pred — это функция задающая условия выборки
элементов из массива items.
Функция должна возвращать длину нового массива с элементами удовлетворяющими pred.
А также изменять массив items, который принимает в качестве аргумента.
В моем коде items не изменяется во внешней области видимости. Как сделать чтобы он
изменялся?
В консоли пишу
window.items.concat(arrPredFalse, arrPredTrue);
и работает, но codewars выдает ошибку.
function partitionOn(pred, items) {
var arrPredTrue = [];
var arrPredFalse = [];
for (var i = 0; i < items.length; i++) {
if (pred(items[i])) {
arrPredTrue.push(items[i]);
} else {
arrPredFalse.push(items[i]);
}
}
items.concat(arrPredFalse, arrPredTrue);
return arrPredTrue.length;
}
Ответы
Ответ 1
Функция concat в строке items.concat(arrPredFalse, arrPredTrue); Создает новый массив и возвращает его в никуда. При этом в исходном массиве изменений не происходит. Присвоение результата той же переменной items, также не отразится на глобальном массиве, из-за того, что в этом случае просто изменится ссылка на которую будет указывать параметр items. Чтобы изменения применились, нужно использовать функции непосредственно меняющие массив: push, splice items.push(...arrPredFalse, ...arrPredTrue); или items.splice(items.length, 0, ...arrPredFalse, ...arrPredTrue); В примерах выше используется spread operator, упрощающий передачу массива в качестве списка параметров. Без его использования нужно использовать apply items.push.apply(items, arrPredFalse.concat(arrPredTrue)); или items.splice.apply(items, [items.length, 0].concat(arrPredFalse,arrPredTrue));
Комментариев нет:
Отправить комментарий