[javascript] Object.values ​​()의 대체 버전

Object.values()기능 의 대체 버전을 찾고 있습니다.
으로 여기에 설명 된 기능은 인터넷 익스플로러에서 지원되지 않습니다.

다음 예제 코드를 실행할 때 :

var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

Firefox와 Chrome 모두에서 작동하지만 IE11에서 다음 오류가 발생합니다.

개체가 속성 또는 메서드 “값”을 지원하지 않습니다.

여기서 테스트 할 수 있습니다 : Fiddle .

그렇다면 빠른 수정은 무엇입니까?



답변

키 배열 을 얻은 Object.keys()다음 map()값을 가져 오는 데 사용할 수 있습니다.

var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
  return obj[e]
})

console.log(values)

ES6에서는 화살표 기능을 사용하여 한 줄로 작성할 수 있습니다.

var values = Object.keys(obj).map(e => obj[e])


답변

Object.values ​​()는 ES8 (2017 년 6 월) 사양의 일부입니다. Cordova를 사용하여 Android 5.0 Webview가 지원하지 않는다는 것을 깨달았습니다. 그래서 다음을 수행하여 기능이 지원되지 않는 경우에만 polyfill 함수를 생성했습니다.

if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);


답변

Object는 ( 그렇지 않은 ) 최근 구현 이므로 모든 브라우저 (AKA IE8 이하) 를 지원 하려면 고유 한 함수를 만들어야합니다.

function objectValues(obj) {
    var res = [];
    for (var i in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, i)) {
            res.push(obj[i]);
        }
    }
    return res;
}

추신 : 방금 ecmascript-6태그를 발견했습니다 . Btw 누군가가 필요할 경우를 대비 하여이 답변을 여기에 보관합니다.


답변

이미 core-js를 사용하고 있다면 (예 : Angular 사용) 해당 폴리 필을 가져올 수 있습니다.

   import 'core-js/es7/object';


답변

polyfill을 사용할 수 있습니다.

const valuesPolyfill = function values (object) {
  return Object.keys(object).map(key => object[key]);
};

const values = Object.values || valuesPolyfill;

console.log(values({ a: 1, b: 2, c: 3 }));


답변

UnderscoreJS를 사용하는 사람들의 경우 다음을 사용하여 객체 값을 가져올 수 있습니다 _.values.

var obj = { foo: 'bar', baz: 42 };
console.log(_.values(obj)); // ['bar', 42]


답변

var x = {Name: 'John', Age: 30, City: 'Bangalore'};

Object.prototype.values = function(obj) {
                                var res = [];
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            res.push(obj[i]);
        }
    }
    return res;
};

document.getElementById("tag").innerHTML = Object.values(x)
<p id="tag"></p>