如何在对象中推送新元素?

时间:2018-01-24 16:34:43

标签: javascript arrays

我有这个格式的下一个对象,我想在白天插入新对象:

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')。

3 个答案:

答案 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)