2016-12-08 26 views
0

我期待通过question_id分隔以下对象。基本上索引所有question_id在该索引内都是相同的。如何使用jQuery使用对象内的值进一步索引对象?

Array[13] 
0 
: 
    Object 
    answer: 
    "Water leaking" 
    appliance_id: 
    16 
    created_at: 
    "2016-11-03 22:32:49" 
    id: 
    32 
    question_id: 
    40 
    updated_at: 
    "2016-11-03 22:32:49" 
    __proto__: 

Object 
1 
: 
Object 
answer: 
"Front Loading" 
appliance_id: 
16 
created_at: 
"2016-11-03 22:33:16" 
id: 
33 
question_id: 
41 
updated_at: 
"2016-11-03 22:33:16" 
__proto__: 

Object 
2 
: 
Object 
answer: 
"Yes" 
appliance_id: 
16 
created_at: 
"2016-11-03 22:33:23" 
id: 
34 
question_id: 
42 
updated_at: 
"2016-11-03 22:33:23" 
__proto__: 

Object 
3 
: 
Object 
answer: 
"No" 
appliance_id: 
16 
created_at: 
"2016-11-03 22:33:30" 
id: 
35 
question_id: 
42 
updated_at: 
"2016-11-03 22:33:30" 
__proto__: 
Object 

如何将它们分离出来分离出一个对象?

UPDATE JSON

 [ 
{"id":32,"appliance_id":16,"question_id":40,"answer":"Water leaking","created_at":"2016-11-03 22:32:49","updated_at":"2016-11-03 22:32:49"}, 

    {"id":33,"appliance_id":16,"question_id":41,"answer":"Front Loading","created_at":"2016-11-03 22:33:16","updated_at":"2016-11-03 22:33:16"}, 

    {"id":34,"appliance_id":16,"question_id":42,"answer":"Yes","created_at":"2016-11-03 22:33:23","updated_at":"2016-11-03 22:33:23"}, 

    {"id":35,"appliance_id":16,"question_id":42,"answer":"No","created_at":"2016-11-03 22:33:30","updated_at":"2016-11-03 22:33:30"}, 

    {"id":36,"appliance_id":16,"question_id":43,"answer":"Yes","created_at":"2016-11-03 22:33:38","updated_at":"2016-11-03 22:33:38"}, 

    {"id":37,"appliance_id":16,"question_id":43,"answer":"No","created_at":"2016-11-03 22:33:44","updated_at":"2016-11-03 22:33:44"}, 

    {"id":38,"appliance_id":16,"question_id":44,"answer":"Yes","created_at":"2016-11-03 22:33:53","updated_at":"2016-11-03 22:33:53"}, 

    {"id":39,"appliance_id":16,"question_id":44,"answer":"No","created_at":"2016-11-03 22:34:02","updated_at":"2016-11-03 22:34:02"}, 

    {"id":40,"appliance_id":16,"question_id":45,"answer":"Just happened","created_at":"2016-11-03 22:34:16","updated_at":"2016-11-03 22:34:16"}, 

    {"id":41,"appliance_id":16,"question_id":46,"answer":"1-3 years ago","created_at":"2016-11-03 22:34:30","updated_at":"2016-11-03 22:34:30"}, 

    {"id":42,"appliance_id":16,"question_id":47,"answer":"Yes","created_at":"2016-11-03 22:34:35","updated_at":"2016-11-03 22:34:35"}, 

    {"id":43,"appliance_id":16,"question_id":47,"answer":"No","created_at":"2016-11-03 22:34:39","updated_at":"2016-11-03 22:34:39"}, 

    {"id":44,"appliance_id":16,"question_id":46,"answer":"3-5 years ago","created_at":"2016-11-03 23:20:25","updated_at":"2016-11-03 23:20:25"} 
] 

全码

    .done(function(response){ 

         var questions = response.questions; 
         var answers = response.answers; 
         console.log(response.questions); 
         console.log(response.answers); 
         JSON.stringify(answers); 

         var question = $.map(response.questions, function (item) { 
         return item.question; 
         }); 

         var question_id = $.map(response.questions, function (item) { 
         return item.id; 
         }); 

         console.log(question); 
         console.log(question_id); 

         var q_id = 40; 

        // console.log(question); 

         var n = $(question).length; 

         var list = []; 
         for (var i = 1; i <= n; i++) { 
          list.push(i); 
         } 



         swal.setDefaults({ 
         input: 'radio', 
         confirmButtonText: 'Next &rarr;', 
         showCancelButton: true, 
         animation: false, 
         progressSteps: list 
         }) 

        // Get range of question indexes 
         var i = 0; 
         var hi = n - 1; 

         console.log(i); 
         console.log(hi); 

         // Sweet alert- Answers radio button 
         // inputOptions can be an object or Promise 
         var inputOptions = new Promise(function (resolve) { 
         setTimeout(function() { 
          resolve({ 
          // ANSWERS TO GO IN HERE BY QUESTION 
          }) 
         }, 1000) 
         }) 

         var step = [ 
         { 
         title: '', 
         input: 'radio', 
         inputOptions: inputOptions, 

         }, 
         ] 

        var steps = question.map((title) => { 
          var clone = Object.assign({}, step); 
          clone.title = title; 
          return clone; 
         }); 

         console.log(steps); 

         swal.queue(steps).then(function (result) { 
         swal.resetDefaults() 
         swal({ 
          title: 'All done!', 
          html: 
          'Your answers: <pre>' + 
           JSON.stringify(result) + 
          '</pre>', 
          confirmButtonText: 'Lovely!', 
          showCancelButton: false 
         }) 
         }, function() { 
         swal.resetDefaults() 
         }) 

初始响应回答

enter image description here

+0

最简单的方法是用jquery'each'遍历并抓取匹配的对象。 – Steve

+0

然后我需要用正确的索引重新创建对象? –

+0

其中,请显示'JSON.stringify(array)'的结果,而不是复制粘贴出控制台窗口。另外,http://stackoverflow.com/q/30735465/215552 –

回答

1

如果你想将它们按question_id您可以使用下面的代码:

Array.prototype.groupBy = function(groupByField) { 
    var groups = {}; 
    this.forEach(function(el) { 
     var key = el[groupByField]; 
     if (key in groups == false) { 
      groups[key] = []; 
     } 
     groups[key].push(el); 
    }); 
    return Object.keys(groups).map(function(key) { 
     return { 
      key: key, 
      values: groups[key] 
     }; 
    }); 
}; 

和使用:

var newList = list.groupBy('question_id'); 

这里是下划线相当于:

var newList _.groupBy(list , 'question_id'); 

UPDATE:

一旦你通过question_id分组他们,然后你的var q_id = 40;

var itemsWithSameQuestion = newList.filter(function(v) { 
    return v.key == q_id; // Filter out the appropriate one 
}) 

更新2:

不得不改变el.groupByFieldel[groupByField],最后变化v.id在过滤器v.key

查看plunkr here

+0

感谢Yaser ...试图对此有所了解。 JS不是我最强的语言。如果原始对象被保存为答案的变量。该变量将在哪里提供答案。 –

+0

你可以使用一些包含这些代码的代码来更新你的问题吗?@JamesParsons – Yaser

+0

谢谢亚瑟。我用完整的代码更新了上述内容。正如你所看到的,我正在使用链接模式和快速警报。到目前为止,我已经在标题(问题)中进行了映射。整个过程是AJAX查询的完全响应。我正在解答所有的答案。我现在需要做的事情是将他们分组到具体问题的答案中并显示出来。 –

相关问题