2017-01-10 2 views
3

Я работаю на панели приборов wso2 carbon. Моя таблица содержит 2 поля (имя и номер). У меня есть дублирующее имя в объектах, но с другим номером. Я хочу уникальное имя с добавлением чисел.Как получить уникальные значения из массива объектов с добавлением чисел

[ 
     { 
     "Name":"Abc", 
     "number":2 
     }, 
     { 
     "Name":"bcd", 
     "number":3 
     }, 
     { 
     "Name":"Abc", 
     "number":5 
     } 

]

ожидается выход

[ 
{ 
"name":"Abc", 
"Number":7 
}, 
{ 
"name":"bcd", 
"Number":3 
} 
] 

Я использую Java Script для достижения такой задачи. помогите мне

+1

Возможный дубликат [Что является наиболее эффективным методом GroupBy на яваскрипте массива объектов?] (Http://stackoverflow.com/questions/14446511/what-is-the -most-efficient-method-to-groupby-on-a-javascript-array-of-objects) – Andreas

+0

Можете ли вы предложить простой код. Я новичок в js @Andreas –

ответ

2

Используйте метод Array#reduce с эталонным объектом.

var data = [{ 
 
    "Name": "Abc", 
 
    "number": 2 
 
}, { 
 
    "Name": "bcd", 
 
    "number": 3 
 
}, { 
 
    "Name": "Abc", 
 
    "number": 5 
 
}]; 
 

 
// object for index reference 
 
var ref = {}; 
 

 
// iterate and generate the array 
 
var res = data.reduce(function(arr, o) { 
 
    // check index already defined 
 
    if (!(o.Name in ref)) { 
 
    // if not defined then define index 
 
    ref[o.Name] = arr.length; 
 
    // and push the element 
 
    // you can also use 
 
    // arr.push({Name:o.Name, number:o.number}); 
 
    arr.push(Object.assign({}, o)); 
 
    } else { 
 
    // if index already defined update the number 
 
    arr[ref[o.Name]].number += o.number; 
 
    } 
 
    // return the array reference 
 
    return arr; 
 
    // set initial value as empty array 
 
}, []); 
 

 
console.log(res);

+0

@Sam: рад помочь :) –