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然后可以循环对象,以数组形式存储