#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));
Комментариев нет:
Отправить комментарий