다음과 같은 간단한 개체가 있습니다.
var countries = {
"Argentina":1,
"Canada":2,
"Egypt":1,
};
두 개의 배열을 만들어야합니다. 첫 번째 배열은 객체의 모든 키 배열입니다. 이 배열을 다음과 같이 만들었습니다.
var labels = Object.keys(countries);
이것은 잘 작동합니다. 나는 여러 국가를 얻습니다. 이제 값에서 배열을 만들려고 할 때 …
var labels = Object.values(countries);
이 오류가 발생합니다. Uncaught TypeError: Object.values is not a function JavaScript
내가 뭘 잘못하고 있는지 모르겠다. 나는 console.log countries
선언 전후 labels
에 객체는 동일하게 유지됩니다. 제대로 사용하려면 어떻게해야 Object.values()
합니까?
답변
.values
많은 브라우저에서 지원되지 않습니다. .map
모든 값의 배열을 가져 오는 데 사용할 수 있습니다 .
var vals = Object.keys(countries).map(function(key) {
return countries[key];
});
MDN 문서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values 또는 공식 문서 : https://tc39.github.io/ecma262/#sec- object.values (수정을 위해 @evolutionxbox에게 감사드립니다)
답변
답변
여기에 와서 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
답변
이 문제는 Safari 최신 버전에서 해결 된 것 같습니다. 나는 같은 문제를 겪었습니다. 이 문제는 브라우저 버전 9.0.1에서 발생하며 10.1.1에서는 발생하지 않습니다.
첨부 파일을 추가하기위한 편집 :
[snippet][1]
[object value][2]
[browser version][3]
답변
mozilla에서 논의한대로 “for … in”사용 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
내가 사용한 코드는 다음과 같습니다.
function objectValues(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(objectValues(obj)); // prints the array [ 'v1', 'v1', 'v1' ]
// OR
console.log(objectValues(obj).join(', ')); // prints the string 'v1, v1, v1'
답변
브라우저 호환성에 대한 컴파일 지원에 문제가 있다고 생각합니다. 지도 를 사용 하여 동일한 결과를 얻을 수 있습니다 .
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)