Подтвердить что ты не робот

Как использовать Object.values ​​() на стороне сервера в Node.js

Object.values() получена следующая ошибка:

TypeError: Object.values ​​не является функцией.

Из этого вопроса о stackoverflow - я вижу, что Object.values() не поддерживается во всех браузерах.

Но я использую функцию в Node.js на стороне сервера. Как я могу использовать Object.values() в Node.js, она кажется такой интуитивной, как Object.keys()?

4b9b3361

Ответ 1

Object.values - новая функция в ES2017. Это очень кровоточащий край. Node.js имеет полную поддержку для него из версии 7.0.

6.8.1 поддерживает его, но считается неустойчивым и заблокирован за флагом --harmony.

Вы можете:

  • Поднимитесь до последней версии Node.js LTS и используйте --harmony
  • Перейти к последнему Node.js Current
  • Используйте polyfill

Ответ 2

Object.values ​​() находится в статусе "Черновик" для версии ECMAScript2017 и здесь спецификация: ECMAScript 2017 Draft (ECMA-262) Определение "Object.values ​​" в этой спецификации..

Метод Object.values() возвращает массив соответствующих значений свойств enumerable данного объекта в том же порядке, что и в цикле for for... in (разница в том, что цикл for-in перечисляет свойства в прототипе цепь).

Без изменений в вашей среде NodeJS вы можете добиться того же, используя Object.keys(), который возвращает массив ключей и связывает метод Array.prototype.map() для возврата желаемого массива значений Object:

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, и теперь я наткнулся на ту же проблему и решил ее с помощью этой простой строки (предполагая, что это объект) const values = Object.keys(a).map(k => a[k]);

Ответ 5

3 альтернативы, если вы не хотите обновлять узел

  1. отображение ключей как в этом ответе
  2. используя lodash в качестве другого ответа от @sakovias
  3. используя этот object.values пакет npm

Ответ 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/

У меня это сработало :)