次のような単純なオブジェクトがあります。
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()
を適切に使用するにはどうすればよいですか?
.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に感謝)
Nodeバージョン> = 7.0.0のみがこれを完全にサポートしていることにも注意してください。
ここで終了し、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
この問題はサファリの最新バージョンで修正されているようです。同じ問題が発生しました。この問題はブラウザーバージョン9.0.1で発生し、10.1.1では発生しません
添付ファイルを追加するための編集。
[snippet][1]
[object value][2]
[browser version][3]
.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));
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)
_.values(object)
の使用を検討してください