我正在尝试将项目推送到数组,但无法正常工作。运行代码时,出现此错误:
-未捕获的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;
},
答案 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');