Найти уникальное имя и добавить точки каждого имени, показанного в массиве - PullRequest
0 голосов
/ 26 сентября 2019
var inputArr = [{
            name: "Smith",
            points: 50
        },
        {
            name: "Rock",
            points: 27
        },
        {
            name: "John",
            points: 50
        },
        {
            name: "Rock",
            points: 800
        },
        {
            name: "Smith",
            points: 20
        },
        {
            name: "John",
            points: 80
        }]

outputArr = {
    "Smith" : 70,
    "JOhn" : 130,
    "Rock" : 827
} 

имя должно быть уникальным, а уникальные имена должны быть объединены.Пример: у нас есть 2 числа Смита с разными точками с 50 и 20. Результат должен быть {"Смит": 70}

Ответы [ 3 ]

0 голосов
/ 26 сентября 2019

Вы можете взять объект и уменьшить массив, взяв name и points и назначив добавленное points свойству с помощью name.

var input = [{ name: "Smith", points: 50 }, { name: "Rock", points: 27 }, { name: "John", points: 50 }, { name: "Rock", points: 800 }, { name: "Smith", points: 20 }, { name: "John", points: 80 }],
    result = input.reduce((r, { name, points }) => {
        r[name] = (r[name] || 0) + points;
        return r;
    }, {});

console.log(result);
0 голосов
/ 26 сентября 2019

Я думаю, что это решение проблемы

var inputArr = [{ name: "Smith", points: 50 }, { name: "Rock", points: 27 }, { name: "John", points: 50 }, { name: "Rock", points: 800 }, { name: "Smith", points: 20 }, { name: "John", points: 80 }]
var outputArr = {};
	inputArr.forEach(myFunction)

function myFunction(item, index, arr) {
	if(typeof outputArr[item.name] === "undefined"){
		outputArr[item.name] = parseInt(item.points);
	}else{
		outputArr[item.name] = parseInt(outputArr[item.name] + item.points);
	}
}
console.log(outputArr);
0 голосов
/ 26 сентября 2019
    var inputArr = [{ name: "Smith", points: 50 }, { name: "Rock", points: 27 }, { name: "John", points: 50 }, { name: "Rock", points: 800 }, { name: "Smith", points: 20 }, { name: "John", points: 80 }]
       outputArr ={};
        for(x of inputArr ){
            var total=0;
            for(y of inputArr){
                if(x.name==y.name){
                    total+=y.points;
                }
            }
            if(!outputArr[x.name]){
                outputArr[x.name]=total;
            }
        }
console.log(outputArr);
...