How to use Object.values() on server side in Node.js

Javascriptnode.js

Javascript Problem Overview


Object.values() received following error:

> TypeError: Object.values is not a function.

From this question on stackoverflow - I see that Object.values() is not supported in all browsers.

But I am using the function in Node.js on server side - How can I use Object.values() in Node.js it seems so intuitive like Object.keys()?

Javascript Solutions


Solution 1 - Javascript

Object.values is a new feature in ES2017. It is very bleeding edge. Node.js has full support for it from version 7.0.

6.8.1 supports it, but it is considered unstable and is locked behind the --harmony flag.

You can either:

  • Upgrade to the latest Node.js LTS and use --harmony
  • Upgrade to the latest Node.js Current
  • Use a polyfill

Solution 2 - Javascript

Object.values() is in status "Draft" for the version ECMAScript2017 and here the specification: ECMAScript 2017 Draft (ECMA-262) The definition of 'Object.values' in that specification..

The Object.values() method returns an array of a given object's own enumerable property values, in the same order as that provided by a for...in loop (the difference being that a for-in loop enumerates properties in the prototype chain as well).

Without change nothing in your NodeJS enviroment you can achive the same by using Object.keys() that returns an array of keys and chaining a Array.prototype.map() method to return the desired array of the Object's values:

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);

Solution 3 - Javascript

Lodash is a pretty awesome tool to simplify your JavaScript code. You can use _.values:

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

Solution 4 - Javascript

I am developing a AWS Lambda and now I stumbeled over the same problem and I solved it by this simple line (assuming a is the object)

const values = Object.keys(a).map(k => a[k]);

Solution 5 - Javascript

3 alternative to go around if you don't want to upgrade node

  1. mapping keys as in this answer
  2. using lodash as another answer by @sakovias
  3. using this object.values npm package

Solution 6 - Javascript

Here's a polyfill that kicks in only when it's not already defined:

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

Solution 7 - Javascript

Upgrade your Node.js to the latest version. It'll enable you to use

Object.values()

You can get it from the official site: https://nodejs.org/en/download/current/

It worked for me :)

Solution 8 - Javascript

Or use underscore.js

var _ = require('underscore');

const obj = { 
    foo: "bar", 
    baz: 42 
  };

console.log(_.values(obj));
// ["bar",42]


Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnprView Question on Stackoverflow
Solution 1 - JavascriptQuentinView Answer on Stackoverflow
Solution 2 - JavascriptYosvel Quintero ArguellesView Answer on Stackoverflow
Solution 3 - JavascriptsakoviasView Answer on Stackoverflow
Solution 4 - JavascriptthopawView Answer on Stackoverflow
Solution 5 - JavascriptPhong NguyenView Answer on Stackoverflow
Solution 6 - JavascriptOZZIEView Answer on Stackoverflow
Solution 7 - JavascriptQuince NgomaneView Answer on Stackoverflow
Solution 8 - JavascriptTim CullenView Answer on Stackoverflow