【问题标题】:How do you get an object from an array of JavaScript dicts by key?如何通过键从 JavaScript dicts 数组中获取对象?
【发布时间】:2020-12-24 19:22:47
【问题描述】:

我希望我使用了正确的术语...我通常是一个 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 内容的 slug。所以它看起来像这样:

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。我的问题是,有没有一种好方法可以使用 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!')
});

我无法在搜索中找到与此相关的任何内容。我找到了一个映射解释,但是它获取了给定键的所有值。我希望我缺少一些明显的东西!

【问题讨论】:

    标签: javascript arrays dictionary ejs


    【解决方案1】:

    您可以使用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)
      }
    ...
    

    P.S. 我使用的是const 而不是var,这是ES6 语法和arrow function () =&gt; ...。两者都在 NodeJS 8+ 的服务器端可用。

    【讨论】:

      【解决方案2】:

      你可以使用 .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!')
      });
      

      【讨论】:

        猜你喜欢
        • 2019-04-11
        • 1970-01-01
        • 2019-11-21
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        相关资源
        最近更新 更多