gpt4 book ai didi

javascript - 无法动态分配 JS 对象属性

转载 作者:行者123 更新时间:2023-12-03 12:18:18 25 4
gpt4 key购买 nike

我正在尝试制作一个网络应用程序,它接受几个人的名字并为每个人分配一个 friend ,但在分配 friend 时遇到了问题。

我遇到的问题是它正确地分配了前几个人的 friend ,但总是在数组中的倒数第二个人上崩溃并显示错误消息

TypeError: Cannot set property 'friend' of undefined.

这是我的 app.js 代码的片段。

const express = require("express");
const bodyParser = require("body-parser");

const app = express();
app.use(bodyParser.urlencoded({extended: true}));

let participantsObject = {};
let participantsArray = [];
let randomNumber;

app.get("/new", function(req, res) {
res.sendFile(__dirname + "/new.html");
});

app.post("/new", function(req, res) {
participantsObject[req.body.person] = {};
participantsArray.push(req.body.person);
res.redirect("/new");
});

app.get("/setup", function() {
let size = participantsArray.length;
let participantsWithoutAGifter = participantsArray;

for (var i = 0; i < size; i++) {
randomNumber = Math.floor(Math.random() * participantsWithoutAGifter.length)
participantsObject[participantsArray[i]]["friend"] = participantsWithoutAGifter[randomNumber];
participantsWithoutAGifter.splice(randomNumber, 1);
}

console.log(participantsObject);

});

app.listen(3000, function() {
console.log("Server started on port 3000");
});

这是我的new.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form method="post">
<input type="text" name="person" placeholder="Enter participant name" autofocus>
<button type="submit">Add</button>
<button type="button"><a href="/setup">Finished</a></button>
</form>
</body>
</html>

理想情况下,它可以为所有参与者分配一个 friend ,然后记录整个对象。

任何帮助将不胜感激,在此先感谢。

最佳答案

participantsObject 上尚不存在循环尝试选择的属性。

添加检查属性是否存在。如果是,则为对象分配 friend 属性。如果不是,则分配一个具有 friend 属性的新对象。

for (var i = 0; i < size; i++) {
randomNumber = Math.floor(Math.random() * participantsWithoutAGifter.length);
let participantsIndex = participantsArray[i];
if (participantsObject.hasOwnProperty(participantsIndex)) {
participantsObject[participantsIndex]['friend'] = participantsWithoutAGifter[randomNumber]
} else {
participantsObject[participantsIndex] = {
friend: participantsWithoutAGifter[randomNumber]
}
}
participantsWithoutAGifter.splice(randomNumber, 1);
}

关于javascript - 无法动态分配 JS 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65470491/

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