Цитата:
В MySQL по умолчанию так же нет разницы в каком регистре что написано, можно что-то искать в одном регистре и получить два одинаковых значения в разных. Такой же финт можно сотворить и при выводе, и в итоге у вас могут появится дубликаты. А вот id значение в базе формируются полем с автоикрементом, ранее использованные значения никогда не используются и данные этого поля служат гарантией уникальности (в пределах типа поля, то есть его размера). А если судить по этому: "user": { "id": 1, "username": "Viktor", "phone": "111" } то это уже результат обработки серверным скриптом запроса к базе, ибо сама база такого никак не вернет, если только это не дубликаты json-записей в базе (а это тогда не база, а хлам), или очень не поизголяться с запросом. В общем как ни крути, но мягко говоря, сервер возвращает клиенту хлам, пусть он там сам разбирается, что плохо, и надо не клиенту это делать, а править либо запрос к базе, либо скрипт сервера. |
БД 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); }); |
$.inArray... лишнее, ибо проверку/поиск уникального можно сразу сделать и в $.each.
Цитата:
|
Часовой пояс GMT +3, время: 13:16. |