TypeError:push()不是函数

时间:2019-08-19 14:11:26

标签: javascript

我正在尝试将项目推送到数组,但无法正常工作。运行代码时,出现此错误:

  

-未捕获的TypeError:data.allItems [type] .push不是函数-

var data = {
    allItems: {
      exp: [],
      inc: []
    },
    totals: {
      exp: 0,
      inc: 0
    },
    budget: 0,
    percentage: -1
  };

  return {
      addItem: function(type, des, val) {
          var newItem, ID;

          // Create new ID
          if (data.allItems[type].length > 0) {
              ID = data.allItems[type][data.allItems[type].length - 1].id + 1;
          } else {
              ID = 0;
          }

          // Create new item based on 'inc' or 'exp' type
          if (type === 'exp') {
              newItem = new Expense(ID, des, val);
          } else if (type === 'inc') {
              newItem = new Income(ID, des, val);
          }

          // Push it into our data structure
          data.allItems[type].push(newItem);

          // Return the new element
          return newItem;
      },

3 个答案:

答案 0 :(得分:1)

您需要首先检查对象中是否存在所需的数组。如果是这样,则将其推入。

if(data.allItems[type] && Array.isArray(data.allItems[type])) {
    data.allItems[type].push(newItem);
} else {
  console.warn(type + " is undefined in `allItems`!");
}

// OR

if (data.allItems[type] == undefined || !Array.isArray(data.allItems[type])) {
  // Your Error handler
}

  

注意:您只能在数组上执行push()pop()方法。

const finalArray = {};
finalArray.push({ id: 1}) // You will definitely get an error.

答案 1 :(得分:0)

data.allItems [type]-在您的情况下未定义,您只能将push用于数组。

答案 2 :(得分:0)

您错误地引用了您要推送到的数组。

我将看写一条if语句来引用要推送到的数组,然后将一个参数传递给函数调用。

var data = {
    allItems: {
      exp: [],
      inc: []
    },
    totals: {
      exp: 0,
      inc: 0
    },
    budget: 0,
    percentage: -1
  };

function hi(type) {
  var test;
  if (type === "exp") {
       test = data.allItems.exp;
      } else {
       test = data.allItems.inc;
  }

  test.push('hi');
  console.log(test);

}

hi('exp');