Объясните пожалуйста данный код
function createIntervals(data) { data.sort((a, b) => a - b); let current, result = []; for (let n of data) { console.log(result); if (current && n === current[1] + 1) { current[1] = n; } else { current = [n, n]; result.push(current); } } console.log(result); // output [ [ 1, 5 ], [ 7, 8 ], [ 12, 12 ] ] } createIntervals([1, 2, 3, 4, 5, 7, 8, 12]); почему меняется значение массива result после того как мы запушили в него массив Current, мы ведь изменяем только current и пушим в result это ведь не указатели массив result на каждой итераций [] [ [ 1, 1 ] ] [ [ 1, 2 ] ] [ [ 1, 3 ] ] [ [ 1, 4 ] ] [ [ 1, 5 ] ] [ [ 1, 5 ], [ 7, 7 ] ] [ [ 1, 5 ], [ 7, 8 ] ] [ [ 1, 5 ], [ 7, 8 ], [ 12, 12 ] ] Объясните пожалуйста шаг за шагом |
Не указатели, но ссылки.)
В js всё что не примитивы, то объект, и присваивается по ссылке. |
массив соединение диапазонов
:)
"use strict" function createIntervals(a) { let c; return a.sort((a, b) => a - b) .reduce((a, b) => (c && b === c[1] + 1 ? c[1] = b : a.push(c = [b, b]), a), []); } let output = createIntervals([1, 2, 3, 4, 5, 7, 8, 12]); alert(JSON.stringify(output)); // output [ [ 1, 5 ], [ 7, 8 ], [ 12, 12 ] ] |
Часовой пояс GMT +3, время: 06:34. |