/** * 判斷數組對象中是否有某個對象,有則替換無則添加 * @param {*} initialArr 源數組 * @param {*} obj 判定的對象 * @param {*} pro 對象中的某個屬性名(唯一,通常為id) */ export const formateArrObjData = (initialArr, obj, pro) => { // 判定數據是否為數組 if (!(initialArr instanceof Array)) { return '請傳入正確格式的數組' } // 判定數據是否為對象 if (!(obj instanceof Object)) { return '請傳入正確格式的對象' } if (!pro) { return '請傳入正確格式的屬性名' } let index = initialArr.findIndex((val) => val[pro] === obj[pro]) // 如果有就替換 沒有就添加 if (initialArr.findIndex((val) => val[pro] === obj[pro]) !== -1) { tempArr.splice(index, 1, obj); } else { tempArr.push(obj); } return tempArr } 使用:this.tableArr = formateArrObjData(this.tableArr, tempObj, tempId) // 這里的源數組如果是一維的,可以用擴展運算符、Object.assign()拷貝
let tempArr = [ { id: "a", index_name: "曉看天色" }, { id: "b", index_name: "暮看雲" }, { id: "c", index_name: "春賞百花" }, { id: "d", index_name: "東賞雪" }, { id: "e", index_name: "寵辱不驚" }, { id: "f", index_name: "去留無意" }, { id: "g", index_name: "再會" }, ]; let tempObjA = { id: "f", index_name: "遇見" }; let tempObjB = { id: "m", index_name: "遇見" }; console.log(formateArrObjData(tempArr, tempObjA, "id")) //替換 console.log(formateArrObjData(tempArr, tempObjB, "id")) //新增
