GithubHelp home page GithubHelp logo

test-mstroy's Introduction

test-Mstroy

Test task for MStroy

Есть массив объектов, которые имеют поля id и parent, через которые их можно связать в дерево и некоторые произвольные поля. id может быть как числом, так и строкой. Порядок id не гарантируется, изначально отсутствует какой либо принцип сортировки. Поле type не влияет ни на что, просто отображает возможность наличия какой-то полезной нагрузки в айтемах.

НУЖНО написать класс, который принимает в конструктор массив этих объектов и реализует следующие методы:

    • getAll() Должен возвращать изначальный массив элементов.
    • getItem(id) Принимает id элемента и возвращает сам объект элемента;
    • getChildren(id) Принимает id элемента и возвращает массив элементов, являющихся дочерними для того элемента, чей id получен в аргументе. Если у элемента нет дочерних, то должен возвращаться пустой массив;
    • getAllChildren(id) Принимает id элемента и возвращает массив элементов, являющихся прямыми дочерними элементами того, чей id получен в аргументе + если у них в свою очередь есть еще дочерние элементы, они все тоже будут включены в результат, и так до самого глубокого уровня.
    • getAllParents(id) Принимает id элемента и возвращает массив из цепочки родительских элементов, начиная от самого элемента, чей id был передан в аргументе и до корневого элемента, т.е. должен получиться путь элемента наверх дерева через цепочку родителей к корню дерева.
  • в результате getAllParents ПОРЯДОК ЭЛЕМЕНТОВ ВАЖЕН!

ТРЕБОВАНИЕ: максимальное быстродействие, следовательно, минимальное количество обходов массива при операциях,

  • в идеале, прямой доступ к элементам без поиска их в массиве.

ПЛЮСАМИ будет:

    • написание этого класса на TypeScript
    • написание тестов для функционала методов

ИСХОДНЫЕ ДАННЫЕ: class TreeStore {}

const items = [ { id: 1, parent: 'root' }, { id: 2, parent: 1, type: 'test' }, { id: 3, parent: 1, type: 'test' },

{ id: 4, parent: 2, type: 'test' },
{ id: 5, parent: 2, type: 'test' },
{ id: 6, parent: 2, type: 'test' },

{ id: 7, parent: 4, type: null },
{ id: 8, parent: 4, type: null },

]; const ts = new TreeStore(items);

Примеры использования:

    • ts.getAll() // [{"id":1,"parent":"root"},{"id":2,"parent":1,"type":"test"},{"id":3,"parent":1,"type":"test"},{"id":4,"parent":2,"type":"test"},{"id":5,"parent":2,"type":"test"},{"id":6,"parent":2,"type":"test"},{"id":7,"parent":4,"type":null},{"id":8,"parent":4,"type":null}]
    • ts.getItem(7) // {"id":7,"parent":4,"type":null}
    • ts.getChildren(4) // [{"id":7,"parent":4,"type":null},{"id":8,"parent":4,"type":null}]
    • ts.getChildren(5) // []
    • ts.getChildren(2) // [{"id":4,"parent":2,"type":"test"},{"id":5,"parent":2,"type":"test"},{"id":6,"parent":2,"type":"test"}]
    • ts.getAllChildren(2) // [{"id":4,"parent":2,"type":"test"},{"id":5,"parent":2,"type":"test"},{"id":6,"parent":2,"type":"test"},{"id":7,"parent":4,"type":null},{"id":8,"parent":4,"type":null}]
    • ts.getAllParents(7) // [{"id":4,"parent":2,"type":"test"},{"id":2,"parent":1,"type":"test"},{"id":1,"parent":"root"}] */

test-mstroy's People

Contributors

yhuhuza avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.