Подтвердить что ты не робот

Разница между javascript foreach loop, for..in и angular forEach loop.?

Я новичок в angular. когда я хочу итерации json объекта в angular, я использовал javascript foreach и for..in петли.

Позже я узнал, что сам angular имеет цикл angular.forEach для итерации объектов.

Как сравнить производительность angular.forEach с циклами javascript for..in и foreach?

Почему мы должны использовать angular.forEach вместо javascript foreach и for..in??

Пожалуйста, дайте мне несколько примеров и причин использовать его, что показывает производительность.

Спасибо:)

4b9b3361

Ответ 1

Angular forEach - вызывает функцию итератора один раз для каждого элемента в коллекции obj, который может быть либо объектом, либо массивом.

var values = {name: 'misko', gender: 'male'};
angular.forEach(values, function(value, key) {
  console.log(key + ': ' + value);
});

// Output:
// "name: misko"
// "gender: male"

for..in - итерации по enumerable properties объекта в произвольном порядке. Для каждого отдельного свойства могут выполняться операторы.

var obj = {a:1, b:2, c:3};

for (var prop in obj) {
  console.log("obj." + prop + " = " + obj[prop]);
}

// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

forEach - метод выполняет предоставленную функцию один раз для элемента массива.

// Notice that index 2 is skipped since there is no item at
// that position in the array.
[2, 5, , 9].forEach(function (element, index, array) {
  console.log('a[' + index + '] = ' + element);
});
// logs:
// a[0] = 2
// a[1] = 5
// a[3] = 9

В терминах производительности это зависит от структуры данных, с которой вы работаете, если это Array, я предлагаю использовать Angular.forEach or native forEach, если это будет Object for..in, но это кажется Angular.forEach тоже хорошо обрабатывает объект. В зависимости от объема данных, с которыми вы работаете. Если он будет огромным, я предлагаю вам использовать библиотеки типа Lodash or Underscore, они хорошо справляются с обработкой данных.

Ответ 2

angular.forEach - это в основном polyfill.

Следовательно, если вы используете angular, не имеет значения, является ли браузер старше, потому что angular предоставит замену, если потребуется.

В коде это будет выглядеть так:

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function(...) {
        // angulars own implementation
    }
}

Есть и другие отличия, например

  • angular.forEach поддерживает итерацию по объектам;
  • angular.forEach принимает объект/массив как первый аргумент.