如何在 Node.js 的服务器端使用 Object.values()

Posted

技术标签:

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

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

TypeError: Object.values 不是函数。

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

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

【问题讨论】:

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

Object.values 是ES2017 的新功能。这是非常前沿的。 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 种替代方法

    映射键如this answer @sakovias 使用 lodash 作为另一个答案 使用这个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]

【讨论】:

以上是关于如何在 Node.js 的服务器端使用 Object.values()的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在服务器端使用 Node.js

如何使用 node.js 在服务器端使用纯 JavaScript 读取 JSON 文件?

如何使用 JavaScript 在浏览器中加密数据并使用 Node.js 在服务器端解密

如何使用 node.js“ws”库服务器端监听后续消息

如何在 Node.js 中从客户端(例如 html 按钮 onclick)调用服务器端函数?

如何使用node js(服务器端)在移动应用中实现支付机制?