web-dev-qa-db-ja.com

不明なTypeError:Object.valuesは関数JavaScriptではありません

次のような単純なオブジェクトがあります。

var countries = 
{
"Argentina":1,
"Canada":2,
"Egypt":1,
};

2つの配列を作成する必要があります。最初の配列は、オブジェクトのすべてのキーの配列です。この配列を作成したのは:

var labels = Object.keys(countries);

これはうまく機能します。国の配列を取得します。値から配列を作成しようとすると...

var labels = Object.values(countries);

次のエラーが表示されます:Uncaught TypeError: Object.values is not a function JavaScript

何が間違っているのか分かりません。 countriesを宣言する前と後でconsole.log labelsを実行しましたが、オブジェクトは同じままです。 Object.values()を適切に使用するにはどうすればよいですか?

64

.valuesは多くのブラウザでサポートされていません-.mapを使用してすべての値の配列を取得できます:

var vals = Object.keys(countries).map(function(key) {
    return countries[key];
});

MDN doc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values または公式ドキュメント: https:// tc39.github.io/ecma262/#sec-object.values (修正のために@evolutionxboxに感謝)

191
tymeJV

Nodeバージョン> = 7.0.0のみがこれを完全にサポートしていることにも注意してください。

http://node.green

12
phobos

ここで終了し、Angularを使用している場合は、import 'core-js/es7/object';polyfills.tsファイルに追加すると問題が解決しました。

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/array';
import 'core-js/es6/date';
import 'core-js/es6/function';
import 'core-js/es6/map';
import 'core-js/es6/math';
import 'core-js/es6/number';
import 'core-js/es6/object';
import 'core-js/es6/parse-float';
import 'core-js/es6/parse-int';
import 'core-js/es6/regexp';
import 'core-js/es6/set';
import 'core-js/es6/string';
import 'core-js/es6/symbol';
import 'core-js/es6/weak-map';
import 'core-js/es7/array';
import 'core-js/es7/object'; // added import
7
j3ff

この問題はサファリの最新バージョンで修正されているようです。同じ問題が発生しました。この問題はブラウザーバージョン9.0.1で発生し、10.1.1では発生しません

添付ファイルを追加するための編集。

[snippet][1]
[object value][2]
[browser version][3]
1
Venkata

.valuesは多くのブラウザでサポートされていません-.mapを使用してすべての値の配列を取得できます:

var arr = [{ name: 'Steve',}, { name: 'Mike'}, { name: 'John'}];

function getStudentNames(students) {
   return students.map(x => x[Object.keys(x)]);
}

console.log(getStudentNames(arr));
1

Mozillaで説明されている「for ... in」の使用: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

私が使用したコードは次のとおりです。

function Object_values(obj) {
    let vals = [];
    for (const prop in obj) {
        vals.Push(obj[prop]);
    }
    return vals;
}

// usage
let obj = {k1: 'v1', k2: 'v1', k3: 'v1'};

console.log(Object_values(obj));             // prints   [ 'v1', 'v1', 'v1' ]
// OR
console.log(Object_values(obj).join(', '));  // prints   v1, v1, v1

ブラウザの互換性に関するコンパイルサポートの問題だと思います。mapを使用して同じことを実現できます。

var countries = [
  {
"Argentina": 1,
"Canada": 2,
"Egypt": 1,
"india": 1
  },
  {
"Argentina": 1,
"india": 1,
"US": 2,
"UK": 1,

  }
];

var unpick = countries.map(d=>{ return Object.keys(d) });
console.log(unpick)
var countries = [
  {
"Argentina": 1,
"Canada": 2,
"Egypt": 1,
"india": 1
  },
  {
"Argentina": 1,
"india": 1,
"US": 2,
"UK": 1,

  }
];

var unpick = countries.map(d=>{ return Object.values(d) });
console.log(unpick)
0
KARTHIKEYAN.A

_.values(object)の使用を検討してください

ドキュメント: https://lodash.com/docs/4.17.11#values

0