2017-05-08 6 views
-1

개체를 읽고 이름으로 그룹화하고 각 항목을 세는 데 도움이 필요합니다.JavaScript 객체 속성 별 그룹화 및 새 객체로 푸시

그런 다음 결과를 핸들 바를 반복 할 수있는 다른 개체로 푸시해야합니다. 내가 이름 그것을 통해 루프 몇 가지 코드를 발견까지 집계 한

var names = [ 
{ "name": "Person A" }, 
{ "name": "Person B" }, 
{ "name": "Person C" }, 
{ "name": "Person D" }, 
{ "name": "Person B" }, 
{ "name": "Person C" }, 
{ "name": "Person B" } 
]; 

:

 for(var i = 0; i < names.length; i++) { 

      if(!count[names[i].name]){ 
       count[names[i].name] = 0;      
      } 
      count[names[i].name]++; 
     }  

다음 나에게 제공합니다

enter image description here

여기 내 샘플 객체의

이러한 결과를 새 개체 f에 넣어야합니다. 또는 핸들 바를 읽으십시오. 그래서 나는이 형식으로 데이터를 필요

enter image description here

이 내가 지금까지 내가 새 항목으로 내 응답 객체로 데이터를 밀어 사투를 벌인거야 관리 한 것입니다. 카운트 개체에서 이름과 총을 검색하는 방법을 모르겠습니다.

// Set up the data to be returned 
var names = [ 
{ "name": "Person A" }, 
{ "name": "Person B" }, 
{ "name": "Person C" }, 
{ "name": "Person D" }, 
{ "name": "Person B" }, 
{ "name": "Person C" }, 
{ "name": "Person B" } 
]; 
var count = {}; 
var response = { items:[] }; 



     for(var i = 0; i < names.length; i++) { 

      if(!count[names[i].name]){ 
       count[names[i].name] = 0;      
      } 
      count[names[i].name]++; 
     }    


// Loop through the count object and populate response items 
for(var key in count) { 

    response.items.push({ 
      // How do i put the name and total here? 
      "name": "Person A", 
      "total": 12345 
    }); 
} 


console.log(count); 
console.log(response); 

답변

3

예상 했습니까? 아래와 같이 사용 forin 루프 :

for (var key in count) { 
    response.items.push({ 
     "name": key, 
     "total": count[key] 
    }); 
} 
+0

있음이 너무 감사합니다, 완벽한 – Scott

0

당신은이 작업을 수행 할 수 있습니다.

var names = [{ 
 
    "name": "Person A" 
 
    }, 
 
    { 
 
    "name": "Person B" 
 
    }, 
 
    { 
 
    "name": "Person C" 
 
    }, 
 
    { 
 
    "name": "Person D" 
 
    }, 
 
    { 
 
    "name": "Person B" 
 
    }, 
 
    { 
 
    "name": "Person C" 
 
    }, 
 
    { 
 
    "name": "Person B" 
 
    } 
 
]; 
 

 
var count = {}; 
 
for (var i = 0; i < names.length; i++) { 
 

 
    if (!count[names[i].name]) { 
 
    count[names[i].name] = 0; 
 
    } 
 
    count[names[i].name]++; 
 
} 
 

 
var res = []; 
 
for(var i in count) { 
 
    if(count.hasOwnProperty(i)) { 
 
    res.push({name:i, total:count[i]}); 
 
    } 
 
} 
 
console.log(res);

0

const names = [ 
 
{ "name": "Person A" }, 
 
{ "name": "Person B" }, 
 
{ "name": "Person C" }, 
 
{ "name": "Person D" }, 
 
{ "name": "Person B" }, 
 
{ "name": "Person C" }, 
 
{ "name": "Person B" } 
 
] 
 

 
const count = names.reduce((count, item) => (
 
    count[item.name] 
 
    ? count[item.name]++ 
 
    : count[item.name] = 1 
 
    , count) 
 
, {}) 
 

 
const result = Array.from(Object.keys(count), (key) => ({ name: key, total: count[key] })) 
 

 
console.log(result)