बिना पढ़ा हुआ टाइपर्रर: Object.values ​​एक फंक्शन जावास्क्रिप्ट नहीं है


80

मेरे पास नीचे की तरह एक साधारण वस्तु है:

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()?


आप किस ब्राउज़र का उपयोग कर रहे हैं, क्योंकि एमडीएन के अनुसार इसका समर्थन
मार्क सी।

@ MarkC। मैं Google Chrome 52.0.2743.82
एलेक्स

जवाबों:


224

.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- ऑब्जेक्ट। भाव (सुधार के लिए धन्यवाद @evolutionxbox)


2
अजीब। .valuesइतना शक्तिशाली लगता है। मुझे एक विकल्प दिखाने के लिए धन्यवाद। यह अब बहुत अधिक समझ में आता है!
एलेक्स फॉलेनस्टेड

1
(- अरे, जबकि अद्भुत जा रहा है MDN "आधिकारिक" प्रलेखन नहीं है tc39.github.io/ecma262/#sec-object.values )
evolutionxbox

यहाँ जो उल्लेख नहीं किया गया है, वह यह है कि Object.keys सरणी में लौटे सरणी को फिर से व्यवस्थित करता है जैसे कि यादृच्छिक कुंजी क्रम वाली वस्तुएं इसलिए रिटर्न मान मूल ऑब्जेक्ट के समान क्रम में नहीं हो सकते हैं। var anObj = {100: 'a', 2: 'b', 7: 'c'}; कंसोल.लॉग (Object.keys (anObj)); // कंसोल: ['2', '7', '100']
user1502826

2
ऑब्जेक्ट कुंजियाँ वैसे भी अनियंत्रित हैं, इसलिए सरणी क्रम से कोई फर्क नहीं पड़ना चाहिए।
tymeJV

IE 11 केवल आधुनिक ब्राउज़र का समर्थन नहीं करता है Object.values()। बस आज सुबह हमें। हमने क्रोम पर परीक्षण किया था, लेकिन IE पर नहीं। धन्यवाद, @tymeJV, महान जवाब और उदाहरण के लिए।
एलेक्स

19

यह भी ध्यान देने योग्य है कि केवल नोड संस्करण> = 7.0.0 इसका पूरा समर्थन करते हैं।

http://node.green


1
इस दौड़ने वाले परीक्षण में भाग लिया, मुझे लगा कि मैं नोड v8 पर था, लेकिन पता चला कि मैं नोड v6 पर था। अपने नोड संस्करण की जाँच करें! नोड -v
रशियनसमर

नोड -v संस्करण की जाँच करने के लिए और फिर उन्नयन करने के लिए: stackoverflow.com/a/53658468/5813940
रशियनसमर

16

जो लोग यहां समाप्त हुए और कोणीय उपयोग कर रहे हैं, को जोड़ने के लिए 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

2

ऐसा लगता है कि यह मुद्दा सफारी नवीनतम संस्करण में तय किया गया है। मैं उसी मुद्दे के आसपास आया था। यह समस्या ब्राउज़र संस्करण 9.0.1 में होती है और 10.1.1 में नहीं होती है

अनुलग्नकों को जोड़ने का संपादन:

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

1
क्या आपके पास एक संदर्भ है जिसे आप इस जानकारी के लिए साझा कर सकते हैं? बग रिपोर्ट या कुछ और?
टिम हचिसन

मेरे पास एक संदर्भ नहीं है। 9.0 संस्करण ले जाने वाले मैक सिस्टम लगातार समस्या पैदा कर रहे हैं। लेकिन मेरी प्रणाली 10.1.1 को ले जाने से एक ही समस्या नहीं होती है।
वेंकट

2

"के लिए ..." का उपयोग करना जैसा कि मोज़िला में चर्चा की गई: 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'

0

मुझे लगता है कि ब्राउज़र संगतता पर संकलन समर्थन में समस्या है, आप उसी को प्राप्त करने के लिए मानचित्र का उपयोग कर सकते हैं ।

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)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.