我有这个格式的下一个对象,我想在白天插入新对象:
var new_array = [
{"sunday":[]},
{"monday":[]},
{"tuesday":[]},
{"wednesday":[]},
{"thursday":[]},
{"friday":[]},
{"saturday":[]}
];
我使用循环来确定当天,然后插入
for( let el of arr) {
switch(el.activitie_day) {
case 'sunday':
new_array[0]["sunday"].push(el);
break;
case 'monday':
new_array[0]["monday"].push(el);
break;
case 'tuesday':
new_array[0]["tuesday"].push(el);
break;
case 'wednesday':
new_array[0]["wednesday"].push(el);
break;
case 'thursday':
new_array[0]["thursday"].push(el);
break;
case 'friday':
new_array[0]["friday"].push(el);
break;
case 'saturday':
new_array[0]["saturday"].push(el);
break;
}
}
但是当我尝试这个时会出现错误(无法读取未定义的属性'push')。
答案 0 :(得分:2)
问题是你总是试图进入数组的第一个元素。
new_array[0]["monday"].push(el);
这不存在。这应该是。
new_array[1]["monday"].push(el);
无论如何,那段代码并不漂亮。但这是另一个故事
答案 1 :(得分:1)
您正在混合数组和具有属性的对象,这样您就拥有了一个项目数组,每个项目都有一个属性(项目0有sunday
,第1项有monday
等。)
更好的方法是使用具有命名属性的对象,并将arr
中的日期名称与目标对象(itemsByDay
)中的属性名称进行匹配:
var itemsByDay = {
sunday: [],
monday: [],
tuesday: [],
wednesday: [],
thursday: [],
friday: [],
saturday: []
};
console.log(itemsByDay);
var arr = [];
arr.push({ activitie_day: 'tuesday', value: 1 });
arr.push({ activitie_day: 'friday' , value: 22 });
arr.push({ activitie_day: 'tuesday', value: 333 });
for (var i = 0; i < arr.length; i++) {
var day = arr[i].activitie_day;
// Check if day exists as property of itemsByDay, if so then add item to that array:
if (itemsByDay[day])
itemsByDay[day].push(arr[i]);
}
console.log(itemsByDay);
答案 2 :(得分:0)
这是因为你的开关情况。只有new_array[0]["sunday"]
确实存在,因此所有其他情况都会产生undefined
。
function modify(arr) {
for( let el of arr) {
if (el["monday"]) el["monday"].push("hello")
if (el["tuesday"]) el["tuesday"].push("world")
......
}
}
modify(new_array)