【发布时间】:2019-11-24 09:12:43
【问题描述】:
如果数组中不包含具有相同 id 的对象,我想将一些对象存储在数组中。无论如何,一切正常,直到我开始一次添加多个对象。
这里是使用Vuex的相关代码:
// filter function to check if element is already included
function checkForDuplicate(val) {
for( let sessionItem of state.sessionExercises ) {
return sessionItem._id.includes(val._id);
}
};
// related array from vuex state.js
sessionExercises: [],
// vuex mutation to store exercises to session exercises
storeSessionExercises: (state, payload) => {
// Pre filtering exercises and prevent duplicated content
if( checkForDuplicate(payload) === true ) {
console.log("Exercise ist bereits für session registriert!");
} else {
state.sessionExercises.push(payload);
}
},
// Related vuex action
storeSessionExercises: ({ commit }, payload) => {
commit("storeSessionExercises", payload)
},
正如我之前写的,只要我添加一个对象,一切正常,checkForDuplicate() 将找到重复的对象并拒绝推送到数组。
现在有一种情况,我想将一组对象推送到数组,我通过数据库请求执行此操作,循环输出,提取对象并通过与我所做的相同的函数推送它们单个对象:
// get user related exercises from database + clear vuex storage + push db-data into vuex storage
addSessionWorkout: ({ commit, dispatch }, payload) => {
axios.post(payload.apiURL + "/exercises/workout", payload.data, { headers: { Authorization: "Bearer " + payload.token } })
.then((result) => {
// loop through output array and
for( let exercise of result.data.exercises ) {
// push (unshift) new exercise creation to userExercises array of vuex storage
dispatch("storeSessionExercises", exercise)
};
})
.catch((error) => {
console.error(error)
});
},
推送也可以正常工作,但“过滤功能”却没有发挥作用。它将过滤第一个对象并拒绝将其推送到数组中,但是如果有第二个对象,即使已经包含相同的对象(相同的 ID),也会将其推送到数组中,我在这里看不到什么! ?让我疯了! :D
我理解它就像循环会将每个对象放入 checkForDuplicate() 并查看是否有重复它应该输出 true,因此该对象不会被推入数组。如果有人看到我目前不告诉我的内容。
【问题讨论】:
标签: javascript arrays vue.js filter vuex