Javascript 如何为我的案例在对象中存储数组

Javascript 如何为我的案例在对象中存储数组,javascript,jquery,object,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', ca

我正在尝试将项目推送到阵列

我有点像

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
是一个空数组。在映射函数中,您引用的是
t
中不存在的元素(即
t[item.id]
)。由于,
t
为空,
t[item.id]
将始终返回
undefined
。这就是为什么
push()
不起作用的原因。你得到的错误是试图告诉你这一点。您需要先将
t[item.id]
设置为一个数组,然后才能
push()
将其设置为数组。

使用
t
作为一个对象而不是数组,每个对象都有一个数组值,之前也必须指定该数组值,请尝试:

var t={},项=[
{id:123,名称:'test1',类别:'toy'},
{id:123,名称:'test2',类别:'cookies'},
{id:789,名称:'test3',类别:'toy'},
{id:155,名称:'test4',类别:'pen'},
{id:155,名称:'test5',类别:'橡皮擦'}
];
items.forEach(功能(项目){
!t[item.id]&(t[item.id]=[]);
t[item.id].push(item.category)
})
document.write(JSON.stringify(t));

写(“
”+t[123]+”)// 如果t包含id,您可以在映射中进行检查,如果是,则添加一个类别,否则将推送一个新的obj

    items.map(function(item) {   
    var cid=-1;
    for(i=0;i<t.length;i++){
        if(t[i].id==item.id)
            cid=i;
    }
    var obj={};
    if(cid==-1){
        obj.id=item.id;
        obj.category=[];
        obj.category.push(item.category);
        t.push(obj);  
    }else{
        obj=t[cid];
        obj.category.push(item.category);
        t[cid]=obj;
    }
//do other things
});
items.map(函数(项){
var-cid=-1;

for(i=0;it[item.id]表示数组t的第id个元素

此代码执行以下任务:

var t = [];
var j = [];
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) {
  var isIn = false;
  j.forEach(function(elt, i) {
    if(item.id == elt)
      isIn = true;
  });
  if(!isIn)
    j.push(item.id);
  isIn = false;
});
j.forEach(function(id) {
  var elts = [];
  items.forEach(function(item) {
    if(item.id == id)
      elts.push(item);
  });
  var obj = {};
  obj.id = id;
  obj.category = [];
  elts.forEach(function(elt) {
    obj.category.push(elt.category);
  });
  t.push(obj);
});
console.log(t);
    //do other things

t[item.id]
是一个
对象
是一种
数组
的方法,而不是
对象
。我理解这个错误。但我想知道是否有解决方案。为什么您想要的输出是一个由id键控的哈希数组?我看不出数组的用途。它不是由id键控的单个哈希吗,因为每个键都是唯一的?结果应该是array…
t=[…]
@NinaScholz然后可以循环对象,以数组形式存储