我想采用如下所示的数组:
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,至少不是这类,所以如果我能走上正轨,我们将不胜感激。任何建议或指导,以更清洁的方式来接近这一点将不胜感激。
答案 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。