public function sortBy(callable $callback, $key = null, $options = SORT_REGULAR, $isDescending = false)
    {
        $elements = [];
        $sourceElements = is_null($key) === true ? $this->array : $this->get($key);

        foreach ($sourceElements as $key => $value) {
            $elements[$key] = $callback($key, $value);
        }

        $isDescending ? arsort($elements, $options)
                    : asort($elements, $options);

        foreach (array_keys($elements) as $key) {
            $elements[$key] = $sourceElements[$key];
        }

        return $elements;
    }