如何在 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 在服务器端使用纯 JavaScript 读取 JSON 文件?
如何使用 JavaScript 在浏览器中加密数据并使用 Node.js 在服务器端解密