Почему возвращается значение из цикла, а не функции

123
14 февраля 2019, 06:00

function partitionOn(items) { 
  let arr = []; 
  let long = 0; 
  for (i=0; i<items.length; i++){ 
    if (items[i]%2===0){ 
      arr.push(items[i]) 
      items.splice(i,1) 
 
    } 
  } 
  long = items.length; 
  items = items.concat(arr) 
  console.log(items) 
  return long 
} 
 
var items = [1, 2, 3, 4, 5, 6]; 
var i = partitionOn(items); 
 
console.log(items)

Почему в items элементы в цикле удаляются, а конкатенация не проходит ? В самой функции консоль выводит правильно, а вне ее массив как до конкатенации.

Answer 1

Потому что items.concat(arr) возвращает другой референс на новый массив. Вы просто перетираете референс на массив входного параметра функции. Вам нужно либо манипулировать входным массивом, либо возвращать новый:

function partitionOn(items) { 
  let arr = []; 
  let long = 0; 
  for (i=0; i<items.length; i++){ 
    if (items[i]%2===0){ 
      arr.push(items[i]) 
      items.splice(i,1) 
 
    } 
  } 
  long = items.length; 
  items = items.concat(arr); // тут создали новый массив, 
                             // присобачили к нему items и следом arr, 
                             // вернули реф на новый массив 
   
  return items; 
} 
 
var items = [1, 2, 3, 4, 5, 6]; 
var newItems = partitionOn(items); 
 
console.log(newItems)

READ ALSO
Вызвать фрагмент кода в функции JS

Вызвать фрагмент кода в функции JS

Есть код в листинге 1 и есть функция в листинге 2Оба фрагмента находятся в одном файле и фрагмент из листинга 1 хорошо отрабатывает в других...

158
Не заполняется &lt;li&gt; с классом при помощи javascript

Не заполняется <li> с классом при помощи javascript

Хочу чтобы программа определяла день недели и заполняла расписание в связи с этим, но она заполняет только div, а li не заполняет, что не так?

161
JavaScript, P5.JS, Canvas - Размер канвы и странности метода rect()

JavaScript, P5.JS, Canvas - Размер канвы и странности метода rect()

Использую библиотеку P5JS чтобы нарисовать квадрат шириной и высотой во всю канву:

132