Обновление элемента массива по индексу с использованием эквивалента Object.assign в синтаксисе распространения - PullRequest
0 голосов
/ 15 октября 2019

Я недавно наткнулся на этот драгоценный камень, пытаясь обновить индекс массива;

Я пытался:

const a = [1,2,3];
Object.assign([...a], {1: 10}) );
// [1, 10, 3]

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

Однако, когда я пытаюсь преобразовать это в распространяющий синтаксис:

[...a, ...{1: 10}]

Это на самом деле не работает, выдавая ошибку:

Uncaught TypeError: {(промежуточное значение)} не повторяется

Буду ли я прав, предполагая, что назначение объекта добавляет итерируемый прототип к объекту, заставляя работать первый параметрв то время как распространенный синтаксис является более общим и не включает эту функцию?

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Синтаксис ожидает итерируемый объект

Синтаксис распространения позволяет итерируемый , такой как выражение массива или строка длябыть развернутым в местах, где ожидается ноль или более аргументов (для вызовов функций) или элементов (для литералов массива), или выражение объекта должно быть развернуто в местах, где ожидается ноль или более пар ключ-значение (для литералов объекта).

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

Метод Object.assign () ожидает Object - он не должен быть повторяемым.

Метод Object.assign () используется для копирования значений всех перечисляемых собственных свойств из одного или нескольких исходных объектов в целевой объект. Он вернет целевой объект.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Итерации : https://javascript.info/iterable

Так что, похоже, это совсем наоборотчто вы предложили: распространенный синтаксис менее общий, чем метод Object.assign () , так как для корректной работы требуется более строгий тип элементов.

0 голосов
/ 15 октября 2019

Вы не можете распространять такие объекты. Обратитесь к этому https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...