использую цикл JQuery .each(function(){});
Пример:
var arr = [],
check = '';
$('.commander_check').each(function() {
if (
$(this).prop('checked') && $(this).data('check') == '' ||
!$(this).prop('checked') && $(this).data('check') == 'checked'
) {
check = $(this).prop('checked') ? 'ON' : 'OFF';
arr[$(this).data('login')][check].push({
'id': $(this).data('id'),
'profit': $(this).data('profit')
});
}
});
console.log(arr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="checkbox" class="commander_check" data-check="checked" data-id="19727899" data-login="old" data-profit="ok">
Хочу получить массив вида ['old']['OFF'][['id'=>19727899, 'profit'=>'ok'],[...],...]
но почему то вылетает ошибка Cannot read property 'OFF' of undefined
Задача: перебрать параметры чекбоксов и если .prop('checked') не совпадает с $(this).data('check'), то записать это в многомерный ассоциативный массив, вот собственно запись и не получается
var arr = {},
check = '';
$('.commander_check').each(function() {
var $self = $(this);
if (
$self.prop('checked') && $self.data('check') == '' ||
!$self.prop('checked') && $self.data('check') == 'checked'
) {
check = $self.prop('checked') ? 'ON' : 'OFF';
// У вас не были объявлены следующие значения. По этому оно не могло добавить туда значения, так как этого объекта в массиве не было
arr[$self.data('login')] = {};
arr[$self.data('login')][check] = [];
arr[$self.data('login')][check].push({
'id': $self.data('id'),
'profit': $self.data('profit')
});
}
});
console.log(arr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<input type="checkbox" class="commander_check" data-check="checked" data-id="19727899" data-login="old" data-profit="ok">
Может быть вы хотели сделать как-то так:
var arr = [],
check = '';
$('.commander_check').each(function() {
if (
$(this).prop('checked') && $(this).data('check') == '' ||
!$(this).prop('checked') && $(this).data('check') == 'checked'
) {
check = $(this).prop('checked') ? 'ON' : 'OFF';
arr.push([$(this).data('login')], [check], {
'id': $(this).data('id'),
'profit': $(this).data('profit')
});
}
});
console.log(arr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" class="commander_check" data-check="checked" data-id="19727899" data-login="old" data-profit="ok">
У вас проблема в добавлении в массив.
Спасибо @Yuri - наводка решения была правильно ориентированна по сторонам света, я лишь подкорректировал координаты выстрела
во первых поменял var arr = [] на var arr = {}, как указал @Yuri
и сделал проверку на пустые значения перед заполнением
if( ! ($(this).data('login') in arr)) arr[$(this).data('login')] = {};
if(! (check in arr[$(this).data('login')])) arr[$(this).data('login')][check] =[];
почему в конце [] - видимо .push(); не работает с объектами а только с массивами.
Продвижение своими сайтами как стратегия роста и независимости