gpt4 book ai didi

javascript - Vue、Vuex、JavaScript : includes() does not work as expected

转载 作者:行者123 更新时间:2023-12-01 00:50:14 25 4
gpt4 key购买 nike

如果数组尚未包含具有相同 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,因此该对象不会被插入数组中。如果有人看到我现在的内容,请不要告诉我。

最佳答案

错误是你的过滤功能。您想要循环您的 sessionExercises 并且仅在其中任何一个匹配时返回 true。然而,此时您返回了第一次检查的结果。您的循环始终只运行一次。

选项1:仅在匹配时返回

function checkForDuplicate(val) {
for( let sessionItem of state.sessionExercises ) {
if (sessionItem._id.includes(val._id)) {
return true;
}
}
return false;
};

选项 2:使用 es6 过滤器

storeSessionExercises: (state, payload) => {
var exercises = state.sessionExercises.filter(ex => (ex._id.includes(payload._id)));
if(exercises.length) {
console.log("Exercise ist bereits für session registriert!");
} else {
state.sessionExercises.push(payload);
}
}

关于javascript - Vue、Vuex、JavaScript : includes() does not work as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57043599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com