为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过键从 JavaScript 字典数组中获取对象?

如何通过键从 JavaScript 字典数组中获取对象?

阿晨1998 2024-01-18 20:30:36
我希望我使用了正确的术语......我通常是一个Python人,所以我习惯了字典数据类型。不管怎样,我现在正在开发一个 Node 应用程序,我遇到了一个问题。我让用户从下拉菜单中进行选择,该菜单通过传递到 EJS 的字典对象数组进行填充。每个对象都有一个 slug 和一个名称。所以,它会是这样的:const computers = [{slug: 'dell-desktop', name: 'Dell Desktop'}, {slug: 'macbook-pro', name: 'MacBook Pro'}, {slug: 'imac-27-inch', name: 'iMac, 27-Inch'}];我使用名称填充表单,但我需要后端的 URL 内容。所以它看起来像这样:app.get('/form', function(req, res){res.render('form.ejs', {computers: computers});});总体而言,一切似乎都运行良好,表单按预期填充:<select id = 'computer' name = 'computer'>        <% for (var i = 0; i<computers.length; i++) { %>          <option value = '<%= computers[i].slug %>'><%= computers[i].name %></option>          <% } %>        </select>但是,我从表单收到的数据仅提供了数据。我的问题是,有没有一种好方法可以使用 slug 键从字典数组中获取名称?我已经尝试过这样的方法,但它不起作用,我想知道是否是因为它们在数组中?app.post('/form', function(req, res){  var c_slug = req.body.computer;  var name = computers[c_slug];  console.log(c_slug);  console.log(name);  res.send('Success!')});我在搜索中找不到任何与此相关的内容。我找到了映射解释,但它获取了给定键的所有值。我希望我错过了一些明显的东西!
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

您可以使用Array.find()方法来查找数组中符合给定条件的元素。

它返回数组中满足所提供的测试函数的第一个元素值。否则,返回。undefined

app.post('/form', function(req, res){

  const c_slug = req.body.computers;

  const element = computers.find(el => el.slug === c_slug);

  // element is either an element that was found or undefined

  if (element) {

     const name = element.name;

     // the above can be written like this in ES6

     // const { name } = element;


     // do something

  } else {

     // return 400 (Bad Request)

  }

...

PS我使用constvar是ES6语法和箭头函数 () => ...。两者都可以在 NodeJS 8+ 的服务器端使用。



查看完整回答
反对 回复 2024-01-18
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

你可以使用 .find() 方法


app.post('/form', function(req, res){

  var c_slug = req.body.computers;

  var computer = computers.find(el => el.slug === c_slug);

  console.log(c_slug);

  console.log(computer.name);

  res.send('Success!')

});

或者你可以手动查找


app.post('/form', function(req, res){

  var c_slug = req.body.computers;

  var name ;   

  for (let i = 0; i < computers.length; i++) {

    if (computers[i]['slug'] === c_slug) {

      name = computers[i]['slug'];

      break;

    }

  }

  console.log(c_slug);

  console.log(name);

  res.send('Success!')

});


查看完整回答
反对 回复 2024-01-18
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信