Javascript 将带有数组的数组映射到数组中

Javascript 将带有数组的数组映射到数组中,javascript,dictionary,Javascript,Dictionary,比如说,我有一个带有数组的数组: var arrayWithArrays = [["peter","director","40"],["marie","author","10"],["marie","author","6"],["peter","director","9"]]; 我想要一个新数组,该数组将具有此格式(唯一名称, 唯一名称的所有时间(加起来): 我试过分配一些东西,但都没有达到预期效果。 映射没有像预期的那样工作 var temp = _.map(arrayWit

比如说,我有一个带有数组的数组:

var arrayWithArrays = [["peter","director","40"],["marie","author","10"],["marie","author","6"],["peter","director","9"]];
我想要一个新数组,该数组将具有此格式(唯一名称, 唯一名称的所有时间(加起来):

我试过分配一些东西,但都没有达到预期效果。 映射没有像预期的那样工作

        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);
            }
        }
for(var x=0;x
我觉得我想得太多了,我把事情弄得比实际情况更复杂了……有人有办法让我摆脱头痛吗?我已经花了3个小时研究这个

你可以使用它,并使用一个对象来引用插入的数组

var arrayWithArrays=[“彼得”、“导演”、“40”]、[“玛丽”、“作者”、“10”]、[“玛丽”、“作者”、“6”]、[“彼得”、“导演”、“9”],
结果=[];
arrayWithArrays.forEach(函数(a){
如果(!此[a[0]]){
这个[a[0]]=[a[0],0];
result.push(这个[a[0]]);
}
这个[a[0]][1]+=+a[2];
},Object.create(null));

控制台日志(结果)
使用
数组.forEach
对象的解决方案。键
功能:

var arrayWithArrays=[“彼得”、“导演”、“40”]、[“玛丽”、“作者”、“10”]、[“玛丽”、“作者”、“6”]、[“彼得”、“导演”、“9”],
名称={},结果;
arrayWithArrays.forEach(函数(arr){
(名称[arr[0]]?名称[arr[0]][1]+=+arr[2]:名称[arr[0]]=[arr[0],+arr[2]];
});
结果=对象.键(名称).映射(函数(n){
返回名称[n];
});

log(JSON.stringify(result,0,4))与此处的其他解决方案类似,但带有和

var arrayWithArrays=[
[“彼得”、“董事”、“40”],
[“玛丽”,“作者”,“10”],
[“玛丽”,“作者”,“6”],
[“彼得”、“导演”、“9”]
];
var obj=arrayWithArrays.reduce(函数(acc,项){
如果(!acc[项目[0]])acc[项目[0]]=0;
acc[项目[0]]+=+项目[2];
返回acc;
}, {});
var newArr=Object.keys(obj.map)(函数(i){
返回[i,obj[i]];
});

控制台日志(newArr)
您使用的是下划线.js吗?什么是
chartData
?定义在哪里?@Teemu是的,我用下划线。我喜欢这个。。。“如何将数组映射到另一个数组”。。。“使用地图?”对不起,应该是use forEach。@NinaScholz工作得很好!我正在试图找出如何读取您的代码,以便创建第二个数组,它看起来像[“peter”,“peter”,“director”,2]。(计算角色出现的次数。)我应该创建另一个循环还是可以在同一个循环中再次创建?我建议将数据结构更改为对象。可以更好地访问属性,并且可读性更好。对于这个问题:因此,您需要一些数组,用相同角色的名称填充,最后是一个包含角色和计数的数组?例如:var chartData=[[“peter”,49,[“director”,2,“actor”,4],[“marie”,16],“roleName”,count];它应该扮演一个独特的角色,并计算它发生的次数
        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);
            }
        }