| 
	| 
	
	| 
		
	| 
			
			 
			
				13.06.2020, 18:32
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| 
	
 
	| Сообщение от lolka84 |  
	| Согласен, уже понял это. |  
	
 Хорошо, если так. Я ведь не настаиваю, я просто сужу по данным от сервера. А сервер, судя по ним, получает данные из MySQL причем версии ниже 5.6. Это я сужу по "2020-06-10 14:06:35.6000000", так как такое может вернуть поле типа TIMESTAMP со значением по умолчанию CURRENT_TIMESTAMP (текущая дата/время как метка времени), поэтому и .6000000 в конце, и только этот тип может иметь такое значение по умолчанию. Зачем в таком формате сервер возвращает я не знаю, можно было бы и вернуть как метку времени (в примере это делает клиент) или удобочитаемую дату/время. А в версии MySQL 5.6 и выше такое значение по умолчанию может иметь и поле типа DATETIME, этот тип отличается от TIMESTAMP, он не зависит от часового пояса и в базе будет храниться как "2020-06-10 14:06:35".
 
В MySQL по умолчанию так же нет разницы в каком регистре что написано, можно что-то искать в одном регистре и получить два одинаковых значения в разных. Такой же финт можно сотворить и при выводе, и в итоге у вас могут появится дубликаты. А вот id значение в базе формируются полем с автоикрементом, ранее использованные значения никогда не используются и данные этого поля служат гарантией уникальности (в пределах типа поля, то есть его размера).
 
А если судить по этому:
 
"user": {
                "id": 1,
                "username": "Viktor",
                "phone": "111"
            }
то это уже результат обработки серверным скриптом запроса к базе, ибо сама база такого никак не вернет, если только это не дубликаты json-записей в базе (а это тогда не база, а хлам), или очень не поизголяться с запросом. В общем как ни крути, но мягко говоря, сервер возвращает клиенту хлам, пусть он там сам разбирается, что плохо, и надо не клиенту это делать, а править либо запрос к базе, либо скрипт сервера.			 Последний раз редактировалось laimas, 13.06.2020 в 18:35.
 |  |  
	| 
		
	| 
			
			 
			
				13.06.2020, 20:46
			
			
			
		 |  
	| 
		
			
			| Кандидат Javascript-наук       |  | 
					Регистрация: 23.08.2010 
						Сообщений: 123
					 
		
 |  |  
	| БД mssql    Но не суть. 
Согласен, что ответ далек от идеала, но что есть, то есть. 
В общем получилось вроде все, выглядит как-то так:
 
function getAlarms() {
    $.ajax({
        type: "GET", 
        url: url,
        dataType: 'json',
        headers: {"Authorization": token},
        cache: false,
        success: function (data) {
            var usersArray = [];
            var locationsArray = [];
            var usersIdArray = [];
            $.each(data.data, function(index, e) {
                locationsArray.push({
                    userId: e.user.id,
                    userName: e.user.username,
                    userPhone: e.user.phone,
                    lat: e.lat,
                    lon: e.lon
                });
                if($.inArray(e.user.id, usersIdArray) == -1) {
                    
                    usersIdArray.push(e.user.id);
                    usersArray.push({
                        id: e.user.id,
                        name: e.user.username,
                        phone: e.user.phone,
                        color: getRandomColor()
                    });
                }
                
            });
            console.log(usersIdArray);
            console.log(usersArray);
            console.log(locationsArray);
            createTable(usersArray);
            showOnMap(locationsArray, usersArray);
        },
        error: function (e) {
            console.log("Error: " + e);
        }
    });
}
function showOnMap(locationsArray, usersArray) {
    var myMap = new ymaps.Map('jmap', {
        center: [56.838011, 60.597465], // ekb
        zoom: 12
    });
    $.each(locationsArray, function(i, e){
        var color = getColor(usersArray, e.userId);
        console.log(color);
        var myPlace = new ymaps.Placemark([e.lat, e.lon], {
            balloonContent: e.userName + " " + e.userPhone
        }, {
            preset: 'islands#blackCircleDotIcon',
            iconColor: color
        });
        myMap.geoObjects.add(myPlace);
    });
}
function createTable(usersArray) {
    var table = $('<table id="users"/>')
    var rows = usersArray.length;
    for (var i = 0; i < rows; i++) {
        var row = $('<tr style=background-color:' + usersArray[i].color + '/>')
    
          var cell = $('<td/>')
          cell.html(usersArray[i].id);
          row.append(cell)
          var cell = $('<td/>')
          cell.html(usersArray[i].name);
          row.append(cell)
          var cell = $('<td/>')
          cell.html(usersArray[i].phone);
          row.append(cell)
    
        table.append(row)
      }
    
    table.appendTo('#table');
}
function getColor(usersArray, userId) {
    var color;
    $.each(usersArray, function(i, e){
        
        if(e.id == userId) {
            color = e.color;
            return false;            
        }
    });
    return color; 
}
function getRandomColor() {
    var letters = '0123456789ABCDEF';
    var color = '#';
    for (var i = 0; i < 6; i++) {
      color += letters[Math.floor(Math.random() * 16)];
    }
    return color;
}
$(document).ready(function() {
    ymaps.ready(getAlarms);
});
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				13.06.2020, 21:01
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| $.inArray... лишнее, ибо проверку/поиск уникального можно сразу сделать и в $.each. 
	
 
	| Сообщение от lolka84 |  
	| БД mssql |  
	
 Это не такая большая разница, могу только сказать, что коли это часть данных объекта, значит запрос к БД с подзапросом типа JOIN, а разборкой его никто себя не утруждает, вот вы и занимаетесь на клиенте граблями. |  |  |  |