РЕДАКТИРОВАТЬ
Следующий вопрос: Как я могу удалить массив в JavaScript? не отвечает на вопрос, то есть я получаю, как установить/сбросить массив, но это не мой вопрос. Я хочу сделать это:
ВОПРОС
База кодов: Угловая 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;
};
Вы можете использовать вычисляемые свойства, чтобы сделать это в одной строке:
$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);
id
строкой или числом? (Потому что, если это не числовая строка, установка длины 0 не делает то, что вы думаете, что делает).