javascript - 如何在我的案例中将数组存储在对象中

标签 javascript jquery object

我正在尝试将项目推送到数组。

我有类似的东西

var t = [];
items = [
    {id:123, name:'test1', category:'toy'},
    {id:123, name:'test2', category:'cookies'},
    {id:789, name:'test3', category:'toy'},
    {id:155, name:'test4', category:'pen'},
    {id:155, name:'test5', category:'eraser'}
];

items.map(function(item) {    
    t[item.id].push(item.category);
    //do other things
})

我需要的最终结果

t = [
    {123: ['toy', 'cookies']},
    {789: ['toy']},
    {155: ['pen', 'eraser']}
]

我无法读取未定义的属性“push”。 有更好的办法来解决这个问题吗?多谢!

最佳答案

使用t作为对象而不是数组,每个对象都会有一个数组值,并且之前也必须分配该值,尝试:

var t = {}, items = [
    {id:123, name:'test1', category:'toy'},
    {id:123, name:'test2', category:'cookies'},
    {id:789, name:'test3', category:'toy'},
    {id:155, name:'test4', category:'pen'},
    {id:155, name:'test5', category:'eraser'}
];

items.forEach(function(item){
  !t[item.id] && (t[item.id] = []);
  t[item.id].push(item.category)
})

document.write(JSON.stringify(t));
document.write("<br><b>" + t[123] + "</b>"); //<= Get items by ID

//In your case
var tArray = [];
for(var id in t){
  var obj = {};
  obj[id] = t[id];
  tArray.push(obj)
}
document.write("<br>" + JSON.stringify(tArray));

关于javascript - 如何在我的案例中将数组存储在对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31012681/

相关文章:

javascript - Object.preventExtensions 实际上允许 __proto__ 的突变?

javascript - 无法在 Javascript 中访问另一个对象内的不同对象,它给出 ReferenceError : abc is not defined

javascript - 对象标签中的跨域 SVG 内容文档

javascript - Three.js 后处理运动模糊渲染黑屏

jquery - 组合 :visible and :enabled 的 jQuery 过滤器

javascript - 页面初始加载后加载 jQuery 库

c# - 什么时候在 C#/.NET 中使用 'object'?

javascript - Bluebird Promise.all 回调错误

具有多个输入字段/搜索条件的表上的 jQuery 实时过滤器?

javascript - 检查所有玩家是否准备好