В чем разница между forEach и for in loop? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть код ниже, который используется для forEach и для в цикле.На самом деле, когда я использую forEach для получения правильного результата и когда я пытаюсь использовать для в цикле получения неправильного результата.Так что же не так в коде цикла for.

var currentStateValue = { dashboard: false, brandplay: false };

Код ForEach -

angular.forEach(currentStateValue, function(value, key) {
      authService.isAuthorizedRole(key).then(function(permissionView) {
        if (permissionView == true) {
          currentStateValue[key] = true;
          console.log(currentStateValue);
        }
      });
    });

, который отображает правильный результат

Object { dashboard: true, brandplay: false }

, но когда я использовалв цикле

for (var key in currentStateValue){
        authService.isAuthorizedRole(key).then(function(permissionView) {
          if (permissionView == true) {
            currentStateValue[key] = true;
            console.log(currentStateValue);
          }
        });
      }

показывает неверный результат

Object { dashboard: false, brandplay: true }

1 Ответ

0 голосов
/ 14 мая 2019

Как описано в документации , они иллюстрируют разницу между циклами:

var arr = [3, 5, 7];
arr.foo = 'hello';

for (var i in arr) {
   console.log(i); // logs "0", "1", "2", "foo"
}
// Where i will log the position in the list

for (var i of arr) {
   console.log(i); // logs 3, 5, 7
}
// Where i will log the actual value of the position in the list

var array1 = ['a', 'b', 'c'];

arr.forEach((element) => {
   console.log(element); // logs 3, 5, 7
});

Метод forEach () выполняет предоставленныйфункция один раз для каждого элемента массива.

Прямо из документации

Оператор for ... in выполняет итерацию указанной переменной по всем перечисляемым свойствам объекта.Для каждого отдельного свойства JavaScript выполняет указанные операторы.[...] Хотя может быть заманчиво использовать это как способ перебора элементов Array, оператор for ... in вернет имя ваших пользовательских свойств в дополнение к числовым индексам. ( ЭТО ВАШ ВЫПУСК ) Таким образом, при итерациях по массивам лучше использовать традиционный цикл for с числовым индексом, поскольку оператор for ... in выполняет итерации по пользовательским свойствам в дополнение кэлементы массива, если вы измените объект Array, например добавив пользовательские свойства или методы.

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