Срезать объект JavaScript - PullRequest
2 голосов
/ 29 марта 2019

Есть ли способ slice() объект JavaScript?

Предполагая, что у меня есть объект x = {a:1, b:2, c:3, d:4} как мне отрубить его первый атрибут (точно так же, как я бы сделал с методом .slice(1) для массива), поэтому я получаю x = {b:2, c:3, d:4}?

Один и тот же вопрос поднимался здесь несколько раз (датированный несколько лет назад), но ни один из них не получил ответа, который дает именно то решение, которое мне нужно, и на сегодняшний день выглядит старомодным.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Этот ответ в значительной степени зависит от отсутствия определенного ключевого критерия порядка в вопросе. Если порядок ключей определен, решение становится легким, поскольку может быть создан алгоритм преобразования или сортировки для обработки ключей в определенном порядке.

Поскольку длительное обсуждение в комментариях убедительно доказало, что, поскольку в вопросе не указаны явные критерии для порядка ключей, не существует надежного способа гарантировать, что элемент, разрезанный любым методом, действительно будет тем, что рассматривается человеческий наблюдатель как «первый элемент».

В статье , упомянутой @JordanRunning, уже говорится, что ключи с целочисленными или целочисленными конвертируемыми значениями ставятся в качестве первых элементов.

После этого @Paulpro упомянул, что Object.getOwnPropertyNames и Reflect.ownKeys имеют гарантированный порядок, но Object.keys и Object.entries не имеют гарантированный порядок с ES6.

Если элементы являются только этими 4 ключами в вопросе, то ответ, который использовал бы Object.getOwnPropertyNames или Reflect.ownKeys, был бы возможен, как только порядок гарантированно стал хронологическим для строковых ключей. Но как только мы не знаем, будет ли свойство с целочисленным (или целочисленным конвертируемым) именем или даже что произойдет после элемента z, окончательного ответа на этот вопрос не будет.

Например: скажем, ключи объекта изначально алфавитные. Что происходит после z? следующий ключ аа, аа, и т. д? если да, хорошо ... но есть так много других возможностей ... что, если после z пришел 1? или это кириллица с нестандартными символами? Например, на португальском есть буквы с акцентом, которые для некоторых алгоритмов сортировки идут после всех других букв. Таким образом, у вас есть A, который идет первым, и Á, который идет после Z. Что если алгоритм, который создал объект, упорядочил его неправильно из-за этого, и хронологический порядок стал неправильным?

Итог: невозможно использование объектов. Вместо этого используйте карту, массивы или любое другое решение или определите порядок ключей, как указано ранее.

0 голосов
/ 29 марта 2019

Использование может решить эту проблему с помощью функции среза и карты

    var obj = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four'};

 var result = Object.keys(obj).slice(0,2).map(key => ({[key]:obj[key]})); 

console.log(result);

Тогда это приведет

[ { '0': 'zero' }, { '1': 'one' } ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...