2016-10-06 8 views
0

У меня есть следующий объект:

var business_challenges =[{title: 'Business Challenges'}, [{digital_trans: 'Digital Transformation'}, {agile_mobile:'Agile & Mobile Working always_on'}, {always_on:'Always on Infrastructure'}, {connect_protect: 'Connect & Protect'}, {cost_cutting:'Cost Cutting/Maximise Investment'}, {improving_cust: 'Improving Customer Engagement'} ]]; 
var business_divisions = [{title: 'Business Divisions'},[{SMB:'SMB'}, {DCS:'DCS'}, {DPS:'DPS'}]]; 
var filters = $.merge(business_divisions, business_challenges); 

Я пытаюсь Переберите объект, чтобы получить пар ключ: значение, но я изо всех сил. Значение ключа является числовым, а не ассоциативным массивом, а значение - объектом. Я попробовал вложить еще $ каждый, но это не работает.

Может ли кто-нибудь помочь? Нужно ли мне изменять, как фильтры ?

var filter_html = '<ul>'; 
     //var filtersJSON = $.parseJSON(filters); 
     $.each(filters, function(i, data) { 
      var filter_title = data.title; //THIS WORKS 

      filter_html = filter_html+filter_title; 
      $.each(data, function(key, val) { 
       filter_html = filter_html+'<li><input type="checkbox" value="'+ key +'">'+ val.key +'</li>'; //THIS DOESNT WORK 

      }); 

     }); 
     filter_html = filter_html+ '</ul>'; 


     $('#filterControls').html(filter_html); 
+0

Эта структура данных очень странно. Вы контролируете его источник? – charlietfl

+0

Да, я могу изменить его, если потребуется. Впервые Ive попытался собрать ассоциативный массив/объект в Javascript. Я больше привык к PHP, поэтому немного запутался! – LeeTee

+0

Я думаю, вы должны использовать '$ .extend()' i.p.o. $ .merge(). – Franco

ответ

0

Для

получить пар ключ: значение вы можете проверить каждый элемент в вашем каждом цикле.

Действительно, фильтры объектов содержат объекты и массив объектов.

Для элементов массива вы можете получить текущее значение объекта с:

var key = Object.keys(val)[0]; // get the key name 
var value = val[key]; // from the key name you can get the value 

Это потому, что каждый объект внутри массивов имеет другое имя свойства.

Сниппет:

var business_challenges = [{title: 'Business Challenges'}, [{digital_trans: 'Digital Transformation'}, {agile_mobile: 'Agile & Mobile Working always_on'}, {always_on: 'Always on Infrastructure'}, {connect_protect: 'Connect & Protect'}, {cost_cutting: 'Cost Cutting/Maximise Investment'}, {improving_cust: 'Improving Customer Engagement'}]]; 
 
var business_divisions = [{title: 'Business Divisions'}, [{SMB: 'SMB'}, {DCS: 'DCS'}, {DPS: 'DPS'}]]; 
 
var filters = $.merge(business_divisions, business_challenges); 
 
var filter_html = '<ul>'; 
 
$.each(filters, function (i, data) { 
 
    if (Object.prototype.toString.call(data) === '[object Array]') { 
 
    $.each(data, function (key, val) { 
 
     var key = Object.keys(val)[0]; 
 
     var value = val[key]; 
 
     filter_html = filter_html + '<li><input type="checkbox" value="' + key + '">' + value + '</li>'; 
 
     console.log('Object N. ' + key + ': ' + JSON.stringify(val)); 
 
    }); 
 
    } else { 
 
    filter_html = filter_html + data.title; 
 
    } 
 

 
}); 
 
filter_html = filter_html + '</ul>'; 
 

 

 
$('#filterControls').html(filter_html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<div id="filterControls"></div>

+0

Thats точно, что мне нужно, спасибо! – LeeTee