javascript - 将属性 javascript 合并到新对象中

标签 javascript javascript-objects

我有一个看起来像这样的数组对象(对象数量大约是原来的 100 倍)

var messages =[
{
        date: "12-12-12",
        time: "12:34:10",
        name: "Wence",
        message: "Howdy matey"
    },
{
        date: "12-12-12",
        time: "12:34:10",
        name: "Alice",
        message: "Everything allright?"
    }
{
        date: "12-12-12",
        time: "12:34:10",
        name: "Wence",
        message: "I'm fine and you?"
    }];

通过这个对象,我想创建一个新的 key 对结构,如下所示:

{"wence":["Howdy matey","I'm fine and you?"],"Alice":["Everything allright?"]}

最佳答案

好的,我将再次从您新描述的输入和输出数据示例开始:

var messages = [{
    date: "12-12-12",
    time: "12:34:10",
    name: "Wence",
    message: "Hi Bob"
}, {
    date: "12-12-12",
    time: "12:34:10",
    name: "Bob",
    message: "Howdy partner"
} {
    date: "12-12-12",
    time: "12:34:10",
    name: "Bob",
    message: "Howdy matey."
}];

function structureMessages(list) {
    var data = {}, item;
    for (var i = 0; i < list.length; i++) {
        item = list[i];
        // if no entry for this name yet, initialize it to an empty array
        if (!data.hasOwnProperty(item.name)) {
            data[item.name] = [];
        }
        // add this message to the array for this name
        data[item.name].push(item.message);
    }
    return data;
}


// convert the data format to be messages organized by name
var messagesByName = structureMessages(messages);
console.log(messagesByName["Wence"]);

仅供引用,对于上面的数据,这将创建一个如下所示的数据结构:

{Wence: ["Hi Bob"], Bob: ["Howdy partner", "Howdy matey."]}

对象中的每个键都是一个用户名。每个键的数据是该用户的消息数组。如果它是原始数组中的消息对象数组,它可能会更有用,因为这样您就可以获得日期和时间信息。您可以修改上面的代码来做到这一点,只需更改此行:

 data[item.name].push(item.message);

对此:

 data[item.name].push(item);

如果您这样做,对象中的每个键仍然是用户名,但每个键的数据是消息对象数组(其中包含消息,但也包含其他元数据)。

关于javascript - 将属性 javascript 合并到新对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22105125/

相关文章:

javascript - 按 CSS 样式按钮会显示不需要的键盘 UIWebView

javascript - canvas.toBlob() 在 MSEdge 浏览器中的兼容性

javascript - Angular5 Instascan - 打开相机不工作 <视频>

javascript - 从对象中省略展开数组

javascript - 获取一条末尾带有圆圈的 svg 线来显示

javascript - 如何分配数组中的所有对象?

javascript - 下拉菜单 - 固定属性

javascript - Object.defineProperty 和对象属性字面量之间的区别

javascript - 如何在 JavaScript 中使用 onclick 更改函数中的对象属性

javascript - 迭代对象以验证其键是否存在于数组中