javascript - 将带有数组的数组映射到数组中

标签 javascript dictionary

比方说我有这个带数组的数组:

var arrayWithArrays = [["peter","director","40"],["marie","author","10"],["marie","author","6"],["peter","director","9"]];

我想要一个具有这种格式的新数组(唯一名称, 唯一名称的所有时间加起来):

var chartData = [["peter", 49],["marie",16]];

我已经尝试了很多事情,但都没有达到预期的效果。 映射未按预期工作

        var temp = _.map(arrayWithArrays ,function(x){

            if(chartData[x[0]]){
                chartData[x[0]] += parseInt(x[2]);
            }else{
                chartData[x[0]] = parseInt(x[2]);
            }
        });

老式的方式也无法交付

        for (var x = 0; x < arrayWithArrays.length; x++) {
            if(chartData.length != 0){
                for (var i = 0; i < chartData.length; i++) {
                    if(chartData[i][0] == arrayWithArrays[x][0]){
                        chartData[i][2] += parseInt(arrayWithArrays[x][2]);
                    }else{
                        var array = [];
                        array[0] = arrayWithArrays[x][0];
                        array[1] = parseInt(arrayWithArrays[x][2]);
                        chartData.push(array);
                    }
                }
            }else{
                var array = [];
                array[0] = arrayWithArrays[x][0];
                array[1] = parseInt(arrayWithArrays[x][2]);
                chartData.push(array);
            }
        }

我想我想得太多了,我把它弄得比实际情况更复杂……有人有办法让我摆脱这种头痛吗?我已经为此花费了 3 个小时

最佳答案

你可以使用 Array#forEach并使用一个对象作为对插入数组的引用。

var arrayWithArrays = [["peter", "director", "40"], ["marie", "author", "10"], ["marie", "author", "6"], ["peter", "director", "9"]],
    result = [];

arrayWithArrays.forEach(function (a) {
    if (!this[a[0]]) {
        this[a[0]] = [a[0], 0];
        result.push(this[a[0]]);
    }
    this[a[0]][1] += +a[2];
}, Object.create(null));

console.log(result);

usersDatarolesData 中编辑结果:

var arrayWithArrays = [["peter", "director", "40"], ["marie", "programmer", "10"], ["peter", "author", "10"], ["peter", "author", "6"], ["peter", "director", "9"], ["marie", "author", "2"], ["marie", "author", "3"], ["marie", "programmer", "9"]],
    usersData = [],
    rolesData = [];

arrayWithArrays.forEach(function (a) {
    if (!this.user[a[0]]) {
        this.user[a[0]] = { drilldown: a[0], name: a[0], y: 0, };
        usersData.push(this.user[a[0]]);
    }
    this.user[a[0]].y += +a[2];            
    if (!this.role[a[0]]) {
        this.role[a[0]] = { load: { id: a[0], data: [] } };
        rolesData.push(this.role[a[0]].load);
    }
    if (!this.role[a[0]][a[1]]) {
        this.role[a[0]][a[1]] = [a[1], 0];
        this.role[a[0]].load.data.push(this.role[a[0]][a[1]]);
    }
    this.role[a[0]][a[1]][1]+= +a[2];
}, { user: Object.create(null), role: Object.create(null) });

console.log(usersData);
console.log(rolesData);

关于javascript - 将带有数组的数组映射到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390766/

相关文章:

c# - C# 根据键对字典列表进行排序

python - 唯一字典列表

python - 根据值从现有字典生成所有可能的字典

javascript - 从数据库检索多个 JSON 对象会导致 Express 错误

javascript - 解析json数据以在chrome扩展中以图像形式查看

swift - 将具有不同值类型的快速字典传递给同一函数

java - 如何在 kotlin 中将 map 转换为 Json 字符串?

javascript - 如何在 html iframe 中使用 YouTube Api?

javascript - 为什么这个 puppeteer 的异步函数语法?

javascript - 响应式 CSS : div too big