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

标签 javascript node.js express

我正在尝试制作一个网络应用程序,它接受几个人的名字并为每个人分配一个 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/

相关文章:

javascript - 为什么触发点击在 javascript 中不起作用

javascript - 时间满足收藏值(value)时 meteor 更新

javascript - 这两个说法是什么意思?

node.js - NodeJS : access using domain without port

node.js - 在 React Native 中安装 Realm 后,找不到 module/../../node-pre-gyp

node.js - 在Nodejs(带有express js)项目的ejs文件中添加Font Awesome图标

node.js - 如何设置 Mocha 测试文件以避免 Sequelize 加载错误?

javascript - 如何向全局数组添加异步信息?

node.js - socket.io socket.set 和 socket.get - 什么是回调参数?

mysql - 使用 Express.js api 和 mysql 包将数组发布到 MySQL Workbench