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

How to store array in object for my case

本文关键字:案例 对象 我的 数组 存储      更新时间:2023-09-26

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

我有类似的东西

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作为对象而不是数组,每个对象都将有一个数组值,该值之前也必须赋值,Try:

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));

在您的代码中,t是一个数组。在映射函数中,您正在引用t中不存在的元素(即t[item.id])。由于t为空,t[item.id]将始终返回undefined。这就是push()不起作用的原因。你得到的错误是试图告诉你这一点。您需要使t[item.id]成为一个数组,然后才能对其进行push()

如果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
});

t[item.id]将建议数组的idth元素t

这个代码完成了任务:

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