我有一个看起来像这样的数组对象(对象数量大约是原来的 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/