Сбросить массив JS и установить массив динамических ключей с одной строкой кода?

0

РЕДАКТИРОВАТЬ

Следующий вопрос: Как я могу удалить массив в JavaScript? не отвечает на вопрос, то есть я получаю, как установить/сбросить массив, но это не мой вопрос. Я хочу сделать это:

  1. установите ключ с динамическим значением, например UUID, и,
  2. затем установите в элементе [0] (выше) значение true в одной строке кода.

ВОПРОС

База кодов: Угловая 1.5x, lodash 4.x

Похоже на основной вопрос, но не может найти ответа. Возможно ли использовать JS, Angular или lodash для сброса массива и установить его одновременно в примере ниже. В соответствии с приведенным ниже примером массив будет продолжать толкать, если я не установлю его сброс. Почему вы спрашиваете, например, если я использую UUID как ключ в HTML, например

HTML

<li id="{[{contactus.app_id}]}"
    ng-show="view.state[item.uuid]"
    ng-repeat="item in collection.items track by item.uuid">
</li>

JS (угловой)

ПРИМЕЧАНИЕ. Этот код работает, и я мог бы также использовать замену $scope.view.state.length = 0; с $scope.view.state = []; но мой вопрос больше связан с переходом в массив, добавлением динамического ключа и установкой его в true в одной строке кода. Сложность заключается в динамическом ключе.

$scope.view = {state:[]};

$scope.setViewState = function (id) {
    // how can I collapse the following 2 lines of code into one
    $scope.view.state = [];
    $scope.view.state[id] = true;
};
  • 0
    Является ли id строкой или числом? (Потому что, если это не числовая строка, установка длины 0 не делает то, что вы думаете, что делает).
  • 0
    Строка - в конце я добавляю альфа-префикс к uuid и обезвоживанию дефисов. Приведенный выше код работает, мне интересно, как получить его в 1 строку кода.
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Вы можете использовать вычисляемые свойства, чтобы сделать это в одной строке:

$scope.view.state = {[id]: true};

Тем не менее, это будет работать только в последних браузерах (Chrome, Firefox, Safari 7. 1+ и Edge), и если у вас есть какие-либо шаги сборки, которые должны анализировать ваш код, они также должны быть обновлены, чтобы понять синтаксис как Что ж.

Если вам нужна более старая поддержка браузера (или если ваши инструменты сборки не могут быть обновлены), вам нужно сделать это в два этапа. Однако вы можете скрыть эти шаги в функции:

function initialState(key, value) {
  var result = {};
  result[key] = value;
  return result;
}

то вы можете просто сделать:

$scope.view.state = initialState(id, true);
  • 0
    Шон, спасибо миллион Исходя из вашего ответа, я буду придерживаться двух строк, так как некоторые из моих пользователей будут иметь более старые браузеры. Я подозреваю, что причиной зависимости браузера является версия angular / js? Я пойду проведу исследование, потому что заинтригован

Ещё вопросы

Сообщество Overcoder
Наверх
Меню