module RubyWasmUi::Utils::Arrays

def self.diff(old_array, new_array)

Returns:
  • (Hash) - Hash containing added and removed items

Parameters:
  • new_array (Array) --
  • old_array (Array) --
def self.diff(old_array, new_array)
  {
    added: (new_array - old_array).uniq,
    removed: (old_array - new_array).uniq
  }
end

def self.diff_sequence(old_array, new_array, equal_proc = ->(a, b) { a == b })

Returns:
  • (Array) - sequence of operations to transform old_array into new_array

Parameters:
  • equal_proc (Proc) --
  • new_array (Array) --
  • old_array (Array) --
def self.diff_sequence(old_array, new_array, equal_proc = ->(a, b) { a == b })
  sequence = []
  array = ArrayWithOriginalIndices.new(old_array, equal_proc)
  index = 0
  while index < new_array.length
    if array.is_removal?(index, new_array)
      sequence << array.remove_item(index)
      next
    end
    if array.is_noop?(index, new_array)
      sequence << array.noop_item(index)
      index += 1
      next
    end
    item = new_array[index]
    if array.is_addition?(item, index)
      sequence << array.add_item(item, index)
      index += 1
      next
    end
    sequence << array.move_item(item, index)
    index += 1
  end
  sequence.concat(array.remove_item_after(new_array.length))
  sequence
end

def self.without_nulls(arr)

Returns:
  • (Array) -

Parameters:
  • arr (Array) --
def self.without_nulls(arr)
  arr.reject { |item| item.nil? }
end