我使用陣列物件,我想洗掉 1 個陣列中的特定值。
let medici= ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ];
let giorni = ["Lun", "Mar", "Mer","Gio","Ven"]; let presenti ={};
for (let giorno of giorni){ presenti[giorno] = medici; }
我得到:
Gio: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
Lun: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
Mar: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
Mer: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"],
Ven: ["Person1", "Person2", "Person3", "Person4", "Person5", "Person6"]
現在我想洗掉特定陣列中的特定值:
giorno="Ven";
nome="Person1";
presenti[giorno].splice(presenti[giorno].indexOf(nome), 1);
它洗掉了所有陣列中的值!!!不僅在“Ven”中...如何洗掉特定陣列中的單個元素而不影響物件的其他陣列?
謝謝
uj5u.com熱心網友回復:
const medici = ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ];
const gironi = ["Lun", "Mar", "Mer","Gio","Ven"];
const presenti = {};
for (const giorno of gironi) {
presenti[giorno] = [...medici];
}
presenti["Ven"].splice(presenti["Ven"].indexOf("Person1"), 1);
console.log(presenti);
您的問題與記憶體參考有關,當您將兩個變數等同起來時,您不會創建另一個相同的物件,而是將物件參考從一個變數復制到另一個變數,因此如果您修改Xchange Y,更正您可以使用擴展運算子創建另一個陣列[...medici]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
uj5u.com熱心網友回復:
let medici= ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ];
let giorni = ["Lun", "Mar", "Mer","Gio","Ven"]; let presenti ={};
for (let giorno of giorni){ presenti[giorno] = medici; }
giorno="Ven";
nome="Person1";
const filteredData = presenti[giorno].filter((p)=>p!==nome)
presenti[giorno] = filteredData
console.log(presenti)
這樣做是因為在 JavaScriptArray中Objects被稱為參考型別。[在此處了解更多資訊]。1
要解決您的問題,您可以這樣做:
giorno="Ven";
nome="Person1";
Person1首先從陣列中
過濾掉。const filteredData = presenti[giorno].filter((p)=>p!==nome)
然后用Ven更新的物件替換filteredData
presenti[giorno] = filteredData
uj5u.com熱心網友回復:
構建物件時,所有陣列都具有相同的參考,因此您需要slice medici對每個物件值進行參考。看看按值復制陣列
現在你可以使用方法了。
let medici= ["Person1","Person2", "Person3", "Person4", "Person5", "Person6" ];
let giorni = ["Lun", "Mar", "Mer","Gio","Ven"]; let presenti ={};
for (let giorno of giorni){ presenti[giorno] = medici.slice(); }
let giorno="Ven";
let nome="Person1";
presenti[giorno].splice(presenti[giorno].indexOf(nome), 1);
console.log(presenti)
uj5u.com熱心網友回復:
使用這個功能:
const obj= {
"Lun": [
"Person1",
"Person2",
"Person3",
"Person4",
"Person5",
"Person6"
],
"Mar": [
"Person1",
"Person2",
"Person3",
"Person4",
"Person5",
"Person6"
],
"Mer": [
"Person1",
"Person2",
"Person3",
"Person4",
"Person5",
"Person6"
],
"Gio": [
"Person1",
"Person2",
"Person3",
"Person4",
"Person5",
"Person6"
],
"Ven": [
"Person2",
"Person3",
"Person4",
"Person5",
"Person6"
]
}
function changeObject(mainObject, {georno, nome}) {
//action -> {georno : "Ven", nome : "Person1"}
let newValue = mainObject[georno].filter(person => person !== nome)
let changedObject = Object.create(null)
changedObject[georno] = newValue
return Object.assign({}, mainObject, changedObject)
}
console.log(changeObject(obj, {georno: "Ven", name : "Person1"}))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419145.html
標籤:
