【问题标题】:How to use Object.values() on server side in Node.js如何在 Node.js 的服务器端使用 Object.values()
【发布时间】:2017-03-18 05:41:55
【问题描述】:

Object.values()收到以下错误:

TypeError: Object.values 不是函数。

来自stackoverflow 上的this 问题-我看到并非所有浏览器都支持Object.values()

但我在服务器端使用 Node.js 中的函数 - 我如何在 Node.js 中使用 Object.values() 看起来像 Object.keys() 一样直观?

【问题讨论】:

  • “但我在服务器端代码上使用它” - 使用 Node.js?
  • 问题是找到如何在 node.js 中使用 Object.values() ,如标题中所述。我已经编辑了问题以使其在正文中也明确。为什么downvote不是重复的?
  • 我没有投反对票。由于不特定的性质,我认为它是重复的,现在已被撤回。
  • 如前所述,它并非不具体——标题清楚地说明了意图
  • 我使用的是节点版本node -v v9.8.0,但我仍然遇到同样的错误。

标签: javascript node.js


【解决方案1】:

Object.valuesES2017 的新功能。这是非常前沿的。 Node.js 从 7.0 版开始有完整的support for it

6.8.1 支持它,但它被认为是不稳定的并且被锁定在--harmony 标志后面。

您可以:

  • 升级到最新的 Node.js LTS 并使用--harmony
  • 升级到最新的 Node.js Current
  • 使用 polyfill

【讨论】:

  • 谢谢,能够用这个答案修复我的 Heroku 应用程序。
  • 使用node -v 找出您正在使用的Node 版本。
【解决方案2】:

Object.values() 处于 ECMAScript2017 版本的“草稿”状态,此处为规范:ECMAScript 2017 Draft (ECMA-262) The definition of 'Object.values' in that specification.

Object.values() 方法返回给定对象自己的可枚举属性值的数组,其顺序与 for...in 循环提供的顺序相同(不同之处在于 for-in 循环枚举原型中的属性链)。

在您的 NodeJS 环境中不做任何更改,您可以通过使用返回键数组的 Object.keys() 并链接 Array.prototype.map() 方法以返回所需的对象值数组来实现相同的目标:

const obj = { 
    foo: "bar", 
    baz: 42 
  },
  // Object.values()
  objValues = Object.values(obj),
  // Object.keys() and map(),
  objKeysMap = Object.keys(obj).map((k) => obj[k]);

console.log('objValues:', objValues);
console.log('objKeysMap:', objKeysMap);

【讨论】:

    【解决方案3】:

    Lodash 是一个非常棒的工具来简化你的 JavaScript 代码。你可以使用_.values:

    var _ = require('lodash');
    _.values({ a: 'a' }) // => ['a']
    

    【讨论】:

      【解决方案4】:

      我正在开发一个 AWS Lambda,现在我偶然发现了同样的问题,我通过这条简单的线解决了它(假设 a 是对象) const values = Object.keys(a).map(k => a[k]);

      【讨论】:

      • 您应该检查它是否还没有为将来的校对定义。我们实际上已经在将来它存在于较新的节点版本中:) 没有理由在它已经定义时覆盖它。跨度>
      【解决方案5】:

      如果您不想升级节点,可以使用 3 种替代方法

      1. 映射键如this answer
      2. @sakovias 使用 lodash 作为另一个答案
      3. 使用这个object.values npm package

      【讨论】:

        【解决方案6】:

        这是一个仅在尚未定义时才启动的 polyfill:

        const objectToValuesPolyfill = (object) => {
          return Object.keys(object).map(key => object[key]);
        };
        Object.values = Object.values || objectToValuesPolyfill;
        

        【讨论】:

          【解决方案7】:

          将您的 Node.js 升级到最新版本。它将使您能够使用

          Object.values()
          

          您可以从官方网站获取它: https://nodejs.org/en/download/current/

          它对我有用:)

          【讨论】:

            【解决方案8】:

            或使用underscore.js

            var _ = require('underscore');
            
            const obj = { 
                foo: "bar", 
                baz: 42 
              };
            
            console.log(_.values(obj));
            // ["bar",42]
            

            【讨论】:

              猜你喜欢
              • 2013-05-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-05-23
              相关资源
              最近更新 更多