2017-12-28 7 views
-1

동일한 seq id를 갖는 모든 숫자를 추가하고 합계 값을 사용하여 아래 표시된 것처럼 final이라는 새 배열에 푸시합니다.ID를 비교하여 숫자를 추가하고 새로운 배열로 밀어 넣으십시오.

INPUT =>

$scope.initial = [{seq:11, name:'ABC', number:20}, 
        {seq:11, name:'ABC', number:50}, 
        {seq:11, name:'ABC', number:80}, 
        {seq:12, name:'DEF', number:30}, 
        {seq:13, name:'JKL', number:10}, 
        {seq:13, name:'JKL', number:15}]; 

OUTPUT =>

$scope.final = [{seq:11, name:'ABC', number:150}, 
       {seq:12, name:'DEF', number:30}, 
       {seq:13, name:'JKL', number:25}]; 

당신을 감사합니다!

+3

시도를 공유하십시오. – gurvinder372

+0

@ gurvinder372 물어 줘서 고마워! 내 코드 데이터 집합에서 질문을 단순화했습니다. –

답변

0
$scope.final = []; 
var acc = {}; 

for(const {seq, name, number} of $scope.initial){ 

    if(seq === acc.seq && name === acc.name){ 
    acc.number += number; 
    }else{ 
    $scope.final.push(acc = {seq, name, number}); 
    } 

} 

누적기를 사용하여 현재 결과 요소를 추적하면됩니다. 그런 다음 현재 반복 된 요소가 해당 누적 기와 일치하는지 확인하고, 합산 한 경우 현재 누락 된 요소를 새 누적기로 추가하지 않습니다. 배열 & 검사의

+2

아마도 for '루프를 사용하고 브라우저에서 올바르게 작동하려면 Babel과 같은 일부 변환기가 필요할 수도 있습니다. –

+0

@Jonas W. 그것은 최종 배열로 올바른 방향을 밀고 있지만 추가가 일어나지 않습니다. 첫 번째 루프 값이 –

+0

@ RajuSah를 추가하지 않고 푸시됩니다. [What ??] (http://jsbin.com/kawokuzehi/edit?console) –

0

루프 다음 ​​추가 할 경우이 seq이있는 경우이

var m = [{ 
 
    seq: 11, 
 
    name: 'ABC', 
 
    number: 20 
 
    }, 
 
    { 
 
    seq: 11, 
 
    name: 'ABC', 
 
    number: 50 
 
    }, 
 
    { 
 
    seq: 11, 
 
    name: 'ABC', 
 
    number: 80 
 
    }, 
 
    { 
 
    seq: 12, 
 
    name: 'DEF', 
 
    number: 30 
 
    }, 
 
    { 
 
    seq: 13, 
 
    name: 'JKL', 
 
    number: 10 
 
    }, 
 
    { 
 
    seq: 13, 
 
    name: 'JKL', 
 
    number: 15 
 
    } 
 
]; 
 
var grouped = []; 
 
m.forEach(function(a) { 
 
    if (!this[a.seq]) { 
 
    this[a.seq] = { 
 
     seq: a.seq, 
 
     name: a.name, 
 
     number: 0 
 
    }; 
 
    grouped.push(this[a.seq]); 
 
    } 
 
    this[a.seq].number = (+this[a.seq].number + +a.number); 
 
}, Object.create(null)); 
 

 
console.log(grouped);

0

당신은 같은 당신의 작업을 수행하는 데 줄일 수 있습니다 :

$scope.initial = [ 
    {seq:11, name:'ABC', number:20}, 
    {seq:11, name:'ABC', number:50}, 
    {seq:11, name:'ABC', number:80}, 
    {seq:12, name:'DEF', number:30}, 
    {seq:13, name:'JKL', number:10}, 
    {seq:13, name:'JKL', number:15} 
]; 

var objReduced = arr.reduce(function(acc, cur){ 
    acc[cur.seq] ? acc[cur.seq].number += cur.number : acc[cur.seq] = cur; 
    return acc; 
}, {}); 

$scope.final = Object.keys(objReduced).map(function(x){ return objReduced[x]; }); 
관련 문제