[javascript] 포착되지 않은 TypeError : Object.values는 함수 JavaScript가 아닙니다.

다음과 같은 간단한 개체가 있습니다.

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에게 감사드립니다)


답변

Node 버전이 7.0.0 이상인 경우에만이를 완벽하게 지원한다는 점도 주목할 가치가 있습니다.

http://node.green


답변

여기에 와서 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)


답변

사용 고려 _.values(object)

문서 : https://lodash.com/docs/4.17.11#values