我正在嘗試遍歷 JSON 物件并將值回傳給另一個函式。

我想將其各自物件的quadrant1_x, quadrant1_y...quadrant4_y的每個值傳遞給calculatePlot()函式。但我收到一個錯誤Uncaught TypeError: user is undefined
Javascript 看起來像這樣:
function generateRandomUser() {
const user = consumeAPI()
return calculatePlot(user)
}
function consumeAPI() {
const graphs = @json($graphs); //received from the backend (Laravel)
for (let i = 0; i < graphs.length; i ) {
graphs.forEach((value, key) => {
console.log([key, value]);
return {
x1: (value.quadrant1_x * range),
y1: (value.quadrant1_y * range),
x2: (value.quadrant2_x * range),
y2: (value.quadrant2_y * range),
x3: (value.quadrant3_x * range),
y3: (value.quadrant3_y * range),
x4: (value.quadrant4_x * range),
y4: (value.quadrant4_y * range),
}
})
}
function calculatePlot(user) {
return [{
x: center user.x1,
y: center - user.y1
}, {
x: center user.x2,
y: center - user.y2
}, {
x: center user.x3,
y: center - user.y3
}, {
x: center user.x4,
y: center - user.y4
}]
}
for (let i = 0; i < maxUsers; i ) {
let plot = generateRandomUser();
let label = `Mid-point`;
addUser(plot, label);
calculateMidPoint(plot);
}
此代碼生成笛卡爾圖作為 SVG。因此,為了渲染圖形,需要 x & y 的每個象限值。
示例:JSFiddle
uj5u.com熱心網友回復:
看起來你的consumeAPI方法沒有回傳任何東西。因此,當您呼叫它時,該值是未定義的。
此外,在forEach回圈內部放置一個for回圈來迭代相同的可迭代物件是沒有意義的......
不確定為什么要在消耗 api 中進行迭代。事實上,目前還不清楚你為什么要迭代。
嘗試回傳您的值:
async function consumeAPI() { // This will probably require async/await.
const graphs = await @json($graphs);
return graphs;
}
在 generateRandomUser 中使用回圈是不合邏輯的,因為您的目標似乎是獲得一個隨機用戶。如果你想獲得一個隨機用戶(陣列中的專案),你可以嘗試這樣的事情:
function generateRandomUser() {
const users = consumeAPI()
var randomItem = users[Math.floor(Math.random()*users.length)]
return users[randomItem];
}
我認為所有額外的回圈和諸如此類的東西都是不必要的。
uj5u.com熱心網友回復:
將 return 放在 a 中forEach只會跳出回圈而不回傳任何內容。這就是為什么consumeAPI回傳undefined。正如@silencedogood 所提到的,不需要forEach在for loop.
如果Array.map需要處理更多物件,您可以將其用作替代方法并轉換陣列內的每個物件。
如果graphs是您希望轉換的物件陣列,您可以簡單地執行以下操作:graphs.map(graph => {x1: graph.quadrant1_x * range ....}); 并回傳轉換后的陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344429.html
標籤:javascript 数组 拉拉维尔
上一篇:將引數傳遞給方法
