как получить индексную позицию элемента массива в контроллере, передавая значение в angularjs
У меня есть массив со списком значений.
[Object { id="5", country="UAE"}, Object { id="4", country="India"}]
Я хочу получить индекс элемента массива на основе значения, присутствующего в id. Как я могу получить позицию индекса элемента массива со значением id = 4 в angularJS Controller?
Ответы
Ответ 1
Метод angularjs (с использованием $ filter) будет чем-то вроде этого
app.controller('MainCtrl', ['$scope', '$filter', function($scope, $filter) {
//array
var items = [{ id: "5", country: "UAE" }, { id: "4", country: "India" }];
//search value
var id2Search = "4";
//filter the array
var foundItem = $filter('filter')(items, { id: id2Search }, true)[0];
//get the index
var index = items.indexOf(foundItem );
}]);
Ответ 2
это не проблема с угловой спецификой, а обычный javascript. просто зациклировать и вернуть индекс
var list = [{ id="5", country="UAE"}, { id="4", country="India"}];
for (var i = 0; i < list.length ; i++) {
if (list[i][id] === 4) {
return i;
}
}
вы можете сделать его общим, сделав его функцией в массиве, который принимает значение и имя свойства
Array.prototype.getIndexOfObject = function(prop, value){
for (var i = 0; i < this.length ; i++) {
if (this[i][prop] === value) {
return i;
}
}
}
Ответ 3
Вы можете использовать функцию map() для итерации по каждому объекту в вашем массиве и проверки любого требуемого свойства. Например, если у вас есть массив объектов
$scope.items =
[
{'id':'1','name':'item1'},
{'id':'2','name':'item2'}
];
для получения индекса второго объекта в массиве используйте
var index = $scope.items.map(function (item) {
return item.id;
}).indexOf(2);
возвращает индекс объекта, содержащего значение 2 в свойстве id.
Ответ 4
Передайте идентификатор, который вы хотите удалить из массива, данной функции из контроллера (функция может быть в том же контроллере, но предпочитать хранить ее в службе).
function removeInfo(id) {
let item = Object .filter(function(item) {
return Object.id === id;
})[0];
let index = Object.indexOf(item);
}