我有一個物件陣列,并且為每個物件分配一個 ID 和一個要執行的任務,如下所示;
const Data = [{
id: 1,
task: doSomething()
},
{
id: 2,
task: doSomethingElse()
},
{
id: 3,
task: doAnotherThing()
},
{
id: 4,
task: DoYetAnotherThing()
},
]
我有一個 for 回圈,它遍歷陣列中的每個物件并將其與想要的 id 進行比較(這不是永久性的)。找到后,我希望程式運行它的任務。那是我遇到問題的時候:
let wantedID = 3
for (const key of Data) {
if (key.id == wantedID) {
key.task
}
}
我認為如果我只是提到key.task它會呼叫該函式并且程式將運行該任務,就像key.task對該函式的呼叫一樣,但它不起作用。嘗試key.task()拋出錯誤,因為 key.task 不是函式..?
我怎樣才能解決這個問題?
謝謝!
uj5u.com熱心網友回復:
從物件中洗掉 () 并將它們添加到 for 回圈中。還要自己定義函式
const Data = [{
id: 1,
task: doSomething
},
{
id: 2,
task: doSomethingElse
},
]
let wantedID = 2
for (const key of Data) {
if (key.id == wantedID) {
key.task()
}
}
function doSomething(){
console.log("doSomething")
}
function doSomethingElse(){
console.log("doSomethingElse")
}
uj5u.com熱心網友回復:
發生這種情況是因為在宣告陣列時呼叫了函式,這是因為在宣告陣列時呼叫了函式,因此它們被呼叫,在這種情況下,此函式回傳的值將分配到該變數中。
檢查下面的螢屏截圖

現在要呼叫您的函式,您需要分配函式而不是呼叫該函式,請檢查下面的螢屏截圖

現在在您的代碼中,函式回傳的值被分配給該變數檢查下面的螢屏截圖

uj5u.com熱心網友回復:
您需要在 obj 的值內撰寫 func 邏輯
let obj = [
{objFunc: () => { console.log('Do Something 1') }, text: 'Do Something' },
{objFunc: () => { console.log('Do Something 2') }, text: 'Do Something Else' },
]
for(let i = 0 ; i < obj.length; i ){
obj[i].objFunc()
}
uj5u.com熱心網友回復:
我認為只需 2 個小改動就能讓它發揮作用。
- 像這樣宣告
task函式:
const Data = [{
id: 1,
// add "() =>" before the function call
task: () => doSomething()
},
{
id: 2,
task: () => doSomethingElse()
},
{
id: 3,
task: () => doAnotherThing()
},
{
id: 4,
task: () => DoYetAnotherThing()
},
]
()在回圈中呼叫它時添加:
let wantedID = 3
for (const key of Data) {
if (key.id == wantedID) {
// .task() instead of .task
key.task()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450039.html
標籤:javascript
