连接JS multidim Array中的字段,排序,然后创建不同类型的JS对象数组

时间:2015-10-16 19:18:05

标签: javascript arrays sorting multidimensional-array javascript-objects

我想采用如下所示的数组:

var contacts = [
    {account: 'Acme', firstName: 'John', lastName: 'Snow'},
    {account: 'Metal Industries', firstName: 'Ted', lastName: 'Smith'}
];

注意:联系人可以使用相同的帐户名称。

并创建一个函数,将数据转换为具有以下结构的对象,该结构类似于地图,其中键是帐户名,值是按字母顺序排列的全名,如下所示:

var acctContactObject = {
    'Acme': ['John Snow','Kyle Johnson','Sara Butler'],
    'HiTech Corp': ['Arnold Williams','Jason Fernandez','Sam Johnson']
};

我不确定我是否采取了正确的方法,并希望在继续之前寻求一些圣人的建议。这是我到目前为止所写的内容以及" psuedocode"因为我在哪里。

function convertAccountArrayToObject(contacts){
            this.account = contacts.account;
            this.firstName = contacts.firstName;
            this.lastName = contacts.lastName;
            this.sort(function(a, b) {
            return a.account.localeCompare(b.account);
            });
            var aco = new acctContactObject();
            var name;
            var nameArray = [];
            for(var member of this){
            //this is where I get stuck
            //I could create a new array to hold the account with full name
            //but somehow need to add them to an array that I can sort on 
            //
            //assuming I used an intermediate array...
            //create new acctContactObject
            //For acct in intermediate array 
            //add name to another single array and sort alphabetically
            //put acct name and sorted list of names into new object
            //after end of loop, return object

我一直在寻找是否有办法在多维数组上进行二次排序,但没有找到我想要的东西。我也提到过"合并"属性,但不确定是否允许我正确地连接名字和姓氏的值。

我不会做很多JS,至少不是这类,所以如果我能走上正轨,我们将不胜感激。任何建议或指导,以更清洁的方式来接近这一点将不胜感激。

1 个答案:

答案 0 :(得分:0)

最简单的方法如下。

注意:我修改了联系人以包含相同帐户名称的情况。

    var contacts = [
        {account: 'Acme', firstName: 'John', lastName: 'Snow'},
        {account: 'Metal Industries', firstName: 'Ted', lastName: 'Smith'},
        {account: 'Metal Industries', firstName: 'Bolt', lastName: 'Coder'}
    ];

    function convertAccountArrayToObject(contacts){
        var returnObj={},key;

        contacts.forEach(function(v,i){
            key=v.account;
            if(!returnObj[key]){

                returnObj[key]=[];

            }
            returnObj[key].push(v.firstName+" "+v.lastName);
        });
        return returnObj;  
    }

 acctContactObject=convertAccountArrayToObject(contacts);

如果您觉得这有用,请进行Upvote。