Far*_*rid 2 javascript arrays json multidimensional-array javascript-objects
我有以下对象数组:
[
{
message: 'This is a test',
from_user_id: 123,
to_user_id: 567
},
{
message: 'Another test.',
from_user_id: 123,
to_user_id: 567
},
{
message: 'A third test.',
from_user_id: '456',
to_user_id: 567
}
]
Run Code Online (Sandbox Code Playgroud)
如何构造一个新的对象数组,其中最外面的对象键基于原始数组中找到的公共键?
这就是我所追求的:
[
{
123: [
{
message: 'This is a test',
from_user_id: 123,
to_user_id: 567
},
{
message: 'Another test.',
from_user_id: 123,
to_user_id: 567
}
]
},
{
456: [
{
message: 'A third test.',
from_user_id: '456',
to_user_id: 567
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,在第一个数组中,用户 ID123显示在两个对象中。这将是新数组中第一个元素的对象键。
您可以使用一个对象并将from_user_id属性作为该对象的键。然后将实际对象推送到组中。groups为了获得最终结果,迭代任意组的键并构建一个新对象。
var data = [{ message: 'This is a test', from_user_id: 123, to_user_id: 567 }, { message: 'Another test.', from_user_id: 123, to_user_id: 567 }, { message: 'A third test.', from_user_id: '456', to_user_id: 567 }],
groups = Object.create(null),
result;
data.forEach(function (a) {
groups[a.from_user_id] = groups[a.from_user_id] || [];
groups[a.from_user_id].push(a);
});
result = Object.keys(groups).map(function (k) {
var temp = {};
temp[k] = groups[k];
return temp;
});
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
与单循环方法一起
var data = [{ message: 'This is a test', from_user_id: 123, to_user_id: 567 }, { message: 'Another test.', from_user_id: 123, to_user_id: 567 }, { message: 'A third test.', from_user_id: '456', to_user_id: 567 }],
result = data.reduce(function (groups) {
return function (r, a) {
var temp = {};
if (!groups[a.from_user_id]) {
groups[a.from_user_id] = [];
temp[a.from_user_id] = groups[a.from_user_id];
r.push(temp);
}
groups[a.from_user_id].push(a);
return r;
};
}(Object.create(null)), []);
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |