Как получить индекс элемента массива в цикле?

У меня есть цикл Angular JS:

angular.forEach($scope.message, function (item) {
      return (item.id_user == input.id_user) ? true : false;
}); 

Как получить индекс элемента массива в цикле для каждого item? Я пробовал:

angular.forEach($scope.message, function (item, $index) {});

Ответ 1

Извините за все ядро ​​сообщества. Вы очень близки к своему решению, но немного сбиты с толку документацией. Все в порядке, позвольте мне пояснить!

В документации для angular.forEach вы увидите следующее утверждение:

Вызывает функцию итератора один раз для каждого элемента в коллекции obj, который может быть либо объектом, либо массивом. Функция итератора вызывается с помощью итератора (value, key, obj), где value - значение свойства объекта или элемента массива, ключ - это ключ свойства объекта или индекс элемента массива, а obj - сам obj. Указание контекста для функции необязательно.

И затем следующий пример:

var values = {name: 'misko', gender: 'male'};
var log = [];
angular.forEach(values, function(value, key) {
  this.push(key + ': ' + value);
}, log);
expect(log).toEqual(['name: misko', 'gender: male']);

По сути, код выглядит следующим образом:

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

Важная часть, которую вам не хватает, заключается в том, что упомянутый выше "обратный вызов..." может быть передан 3 переменным, которые вы затем можете использовать в своем обратном вызове. Ваш обратный вызов будет вызываться для каждого элемента в списке. Вот несколько объяснений этих трех переменных:

Значение: Значение i-го элемента/свойства в списке/массиве/объекте

Ключ: я - индекс, принадлежащий текущему элементу массива

Объект: сам объект (или массив/список)

Вот пример, который я собрал для вас, где я использую ключ для создания новой строки, показывающей индекс каждой буквы в $scope.сообщение. Надеюсь, это помогло!

Ответ 2

angular.forEach($scope.arrayname,function(item,index){
  console.log(item,index)
})

Ответ 3

Есть способ.

var index = 0;
angular.forEach($scope.message, function (item) {
  return (item.id_user == input.id_user) ? index : false;
  index = index + 1;
}); 

Здесь он вернет значение $scope.message index, если item.id_user == input.id_user else возвращает false. Вы также можете назначить $scope.message [index] для какой-либо другой переменной области видимости, подобной этой

var index = 0;
angular.forEach($scope.message, function (item) {
  if(item.id_user == input.id_user){
     $scope.message[index] = $scope.yourVariable;
  }  
  index = index + 1;
});