Javascript 从2个数组中创建一个新数组--带条件

Javascript 从2个数组中创建一个新数组--带条件,javascript,json,Javascript,Json,我有两个数组需要连接在一起,但有一些条件 数组1是一个包含用户ID和用户名的对象数组 数组2包含属于第一个数组中用户ID的其他数据。“sentBy”参数中的ID与数组1中的ID匹配 为了达到这个状态,我整晚都在绞尽脑汁,但我仍然在绞尽脑汁寻找解决这个问题的好办法。非常感谢您的帮助 阵列1: [ { id: 1, username: 'test2' }, { id: 2, username: 'test3' }, { id: 3, username: 'test4'

我有两个数组需要连接在一起,但有一些条件

数组1是一个包含用户ID和用户名的对象数组

数组2包含属于第一个数组中用户ID的其他数据。“sentBy”参数中的ID与数组1中的ID匹配

为了达到这个状态,我整晚都在绞尽脑汁,但我仍然在绞尽脑汁寻找解决这个问题的好办法。非常感谢您的帮助

阵列1:

[ { id: 1,
    username: 'test2' },
  { id: 2,
    username: 'test3' },
  { id: 3,
    username: 'test4' } ]
阵列2:

[ { sentBy: 1,
    message: 'hey',
    createdAt: 'date' },
  { sentBy: 3,
    message: 'hey2',
    createdAt: 'date' },
  { sentBy: 1,
    message: 'hey3',
    createdAt: 'date' } ]
最终结果应该如下所示:

[ 
  { 
    id: 1,
    username: 'test2',
    offlineMessages: 
    [ 
      { message: 'hey', createdAt: 'date' },
      { message: 'hey3', createdAt: 'date' }
    ] 
  },
  { 
    id: 2,
    username: 'test3',
    offlineMessages: [] 
   },
  { 
    id: 3,
    username: 'test4',
    offlineMessages: 
    [ 
      { message: 'hey2', createdAt: 'date' }
    ] 
   } 
]

这里有一个解决方案。这将在适当的位置修改
用户
数组

var users = [ { id: 759141,
    username: 'test2' },
  { id: 759142,
    username: 'test3' },
  { id: 759143,
    username: 'test4' } ];

var messages = [ { sentBy: 759141,
    message: 'hey',
    createdAt: 'date' },
  { sentBy: 759143,
    message: 'hey2',
    createdAt: 'date' },
  { sentBy: 759141,
    message: 'hey3',
    createdAt: 'date' } ];

var usersMap = {};
var user;

for (var i = 0; i < users.length; ++i) {
    user = users[i];
    usersMap[user.id] = user;
    user.offlineMessages = [];
}

for (var i = 0; i < messages.length; ++i) {
    user = usersMap[messages[i].sentBy];

    if (user) {
        user.offlineMessages.push({
            message: messages[i].message,
            createdAt: messages[i].createdAt
        });
    }
}
var users=[{id:759141,
用户名:'test2'},
{id:759142,
用户名:'test3'},
{id:759143,
用户名:'test4'}];
var messages=[{sentBy:759141,
信息:“嘿”,
createdAt:'date'},
{sentBy:759143,
信息:“hey2”,
createdAt:'date'},
{sentBy:759141,
消息:“hey3”,
createdAt:'date'}];
var usersMap={};
var用户;
对于(变量i=0;i
这里有一个解决方案。这将在适当的位置修改
用户
数组

var users = [ { id: 759141,
    username: 'test2' },
  { id: 759142,
    username: 'test3' },
  { id: 759143,
    username: 'test4' } ];

var messages = [ { sentBy: 759141,
    message: 'hey',
    createdAt: 'date' },
  { sentBy: 759143,
    message: 'hey2',
    createdAt: 'date' },
  { sentBy: 759141,
    message: 'hey3',
    createdAt: 'date' } ];

var usersMap = {};
var user;

for (var i = 0; i < users.length; ++i) {
    user = users[i];
    usersMap[user.id] = user;
    user.offlineMessages = [];
}

for (var i = 0; i < messages.length; ++i) {
    user = usersMap[messages[i].sentBy];

    if (user) {
        user.offlineMessages.push({
            message: messages[i].message,
            createdAt: messages[i].createdAt
        });
    }
}
var users=[{id:759141,
用户名:'test2'},
{id:759142,
用户名:'test3'},
{id:759143,
用户名:'test4'}];
var messages=[{sentBy:759141,
信息:“嘿”,
createdAt:'date'},
{sentBy:759143,
信息:“hey2”,
createdAt:'date'},
{sentBy:759141,
消息:“hey3”,
createdAt:'date'}];
var usersMap={};
var用户;
对于(变量i=0;i
尝试此功能:

var getMessageById = function (userId) { 
    return array2.filter(function (obj) { 
        return obj.sentBy == userId; 
    }); 
};
它将返回特定用户的所有消息。

尝试此功能:

var getMessageById = function (userId) { 
    return array2.filter(function (obj) { 
        return obj.sentBy == userId; 
    }); 
};

它将返回特定用户的所有消息。

我喜欢使用哈希表

result = []; // -> Should be {} ! Read comments below!
for(var i in array1) {
  result[array1[i].id] = array1[i];
  result[array1[i].id].offlineMessages = [];
}

for(var i in array2) {
  result[array2[i].sendBy].offlineMessages.push( {
    message: array2[i].message,
    createdAt: array2[i].createdAt
  });
}

我喜欢使用哈希表

result = []; // -> Should be {} ! Read comments below!
for(var i in array1) {
  result[array1[i].id] = array1[i];
  result[array1[i].id].offlineMessages = [];
}

for(var i in array2) {
  result[array2[i].sendBy].offlineMessages.push( {
    message: array2[i].message,
    createdAt: array2[i].createdAt
  });
}

我会写:result={},因为您不将它用作数组。我同意{}将是正确的语法。但是,{}在将结果调用为“命名数组”时对我说object。使用[]是否有缺点?数组将扩展以容纳所有ID,即使它们未被使用。如果id为10000,则数组中有10000个元素。您是100%正确的!我以为这不会发生在I.e.结果[“123”]上,但它确实发生了。。我真丢脸!我会写:result={},因为您不将它用作数组。我同意{}将是正确的语法。但是,{}在将结果调用为“命名数组”时对我说object。使用[]是否有缺点?数组将扩展以容纳所有ID,即使它们未被使用。如果id为10000,则数组中有10000个元素。您是100%正确的!我以为这不会发生在I.e.结果[“123”]上,但它确实发生了。。我真丢脸!完美,快速,干得好,休息一点后,我会努力确保完全理解!非常感谢。不客气。事实上,我只是为了正确而做了一点修改。完美,快速,干得好,我会努力确保在休息一点后我完全理解!非常感谢。不客气。事实上,我只是为了正确起见做了一些修改。