आप कस्टम कोड लिखने के बिना एक वस्तु के पहले एन तत्वों नहीं ले सकते। यह no ordering of the elements in objects है वहाँ क्योंकि, इसलिए यदि इसके लिए एक पुस्तकालय समारोह थे, तो यह आपको तत्वों आप उम्मीद कर देने के लिए गारंटी दी जा कभी नहीं होगा है।
var obj = { b: 3, y: 2, a: 1 };
यह स्पष्ट नहीं है की तरह एक वस्तु को देखते हुए क्या "पहले 2" को संदर्भित करता है - आप a
और b
चाहते हैं, क्योंकि कि वर्णमाला क्रम है? यदि ऐसा है तो वे उस क्रम में हैं या नहीं? यदि नहीं, तो क्या आप b
और y
चाहते हैं क्योंकि वे पहले दिखाई देते हैं? शायद आप a
और y
क्योंकि उनके मूल्यों सबसे कम होने का करना चाहते हैं?
डुप्लिकेट न मिलने से आपको क्या मिलेगा इसके लिए कोई गारंटी नहीं है, इसलिए उन सभी संयोजन मान्य हैं। इसके अलावा, आप उन्हें किसी भी क्रम में प्राप्त कर सकते हैं y
और a
समान रूप से मान्य आउटपुट है आप एक या दूसरे को प्राथमिकता दे सकते हैं लेकिन यह सामान्य रूप से इसे सही नहीं बनाता है।
इसके आसपास के तरीके हैं और आपको यह स्वीकार करना होगा कि आपको गैर-आदेश से निपटने की आवश्यकता है।
शुद्ध जावास्क्रिप्ट समाधान।
function firstN(obj, n) {
return Object.keys(obj) //get the keys out
.sort() //this will ensure consistent ordering of what you will get back. If you want something in non-aphabetical order, you will need to supply a custom sorting function
.slice(0, n) //get the first N
.reduce(function(memo, current) { //generate a new object out of them
memo[current] = obj[current]
return memo;
}, {})
}
var obj = { b: 2, y: 25, a: 1 }
console.log(firstN(obj, 2));
यह Object.keys, Array.prototype.sort, और Array.prototype.reduce
ही lodash साथ प्राप्त किया जा सकता है, लेकिन इस से काफी अधिक संक्षिप्त नहीं उपयोग कर रहा है - यह इसी तरह की सुविधा बुला शामिल होगा। यह इस तरह से किया जा सकता है, उदाहरण के लिए:
function firstN(obj, n) {
return _.chain(obj)
.keys()
.sort()
.take(n)
.reduce(function(memo, current) {
memo[current] = obj[current];
return memo;
}, {})
.value();
}
var obj = { b: 2, y: 25, a: 1 }
console.log(firstN(obj, 2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
आप देख सकते हैं, यह काफी पहले की तरह ही है। सिंटैक्स पर भिन्नताएं हो सकती हैं और सटीक का अर्थ यह है कि आप यह कार्य कैसे करते हैं, लेकिन प्रमुख बिंदु अभी भी वहां होना चाहिए - आपको स्थिरता और के बाद क्रमबद्ध करने की आवश्यकता है, तो आप किसी भी आइटम को प्राप्त कर सकते हैं।
आपके अपेक्षित आउटपुट क्या है? [ए, बी]? –
मैं मूल के सबसेट के साथ {ए: 7, बी: 8} - एक "हैश" (ऑब्जेक्ट) प्राप्त करने की अपेक्षा करता हूं। मैं इसे कम से कम एक (perl-like) हैश के रूप में इलाज कर रहा हूं। – vt5491
कुछ ध्यान में रखें - किसी ऑब्जेक्ट में "पहली" कुंजी पूरी तरह से व्यर्थ है। ऑब्जेक्ट गुणों की कोई आवश्यक स्थिरता नहीं है, इसलिए "पहला तीन" (सिद्धांत में) किसी भी तीन हो सकता है। ब्राउज़र आमतौर पर सम्मिलन आदेश में गुण लौटाते हैं लेकिन उस व्यवहार पर भरोसा नहीं करते हैं। – vlaz