如何将数组存储在我的案例中的对象中
How to store array in object for my case
我正在尝试将项推送到数组。
我有类似的东西
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
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何使用 Meteor.users.update 在特定案例对象中包含变量
- 如何将数组存储在我的案例中的对象中