मैं JS और ramda.js के लिए काफी नया हूँ। मान लें कि मेरे पास इस तरह की खाली वस्तुओं से युक्त एक वस्तु है:

obj = { 1: { }, 2: { }, 3: { } }

और सरणी obj की चुनी हुई कुंजियों से युक्त है।

arr = ['1', '2']

मुझे एक निश्चित कुंजी-मूल्य जोड़ी बनाने की आवश्यकता है, उदाहरण के लिए a: 'value', arr के माध्यम से चुनी गई प्रमुख वस्तुओं के अंदर, इसलिए परिणाम इस तरह दिखेगा:

obj = { 
 1: { a: 'value' }, 
 2: { }, 
 3: { a: 'value' } 
}

मैंने चाबियों के माध्यम से .map करने की कोशिश की है

arr.map(key => assocPath([key, 'a'], 'value', obj) )

, और arr.forEach() के साथ एक तरीका भी आजमाया, लेकिन यह काम नहीं करता है और मुझे विश्वास है कि मुझे कुछ बुनियादी ज्ञान याद आ रहा है? या क्या कोई वैकल्पिक ramda.js फ़ंक्शन है जिसका मुझे उपयोग करना चाहिए?

0
Nanobrain91 29 अक्टूबर 2019, 16:26

3 जवाब

सबसे बढ़िया उत्तर

मेरे समाधान पर एक नज़र डालें

const object = { 1: { }, 2: { }, 3: { } }
const array = ['1', '3']

function magic(obj, arr) {
  return arr.reduce((acc, key) => ({
    ...acc,
    [key]: { a: 'value' },
  }), obj)
}

console.log(magic(object, array))

यह भी रामदा के कार्यों के साथ प्राप्त किया जा सकता है

const object = { 1: { }, 2: { }, 3: { } }
const array = ['1', '3']

const magicR = R.reduce((acc, key) => R.assocPath([ key, 'a' ], 'value', acc))

console.log(magicR(object, array))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
1
lankovova 29 अक्टूबर 2019, 13:39

रामदा विधियां अपरिवर्तनीय हैं - वे मूल वस्तु को उत्परिवर्तित नहीं करती हैं, लेकिन एक नया लौटाती हैं। इस संबंध में R.assocPath विधि अलग नहीं है। ऑब्जेक्ट को अपडेट करने के लिए, आपको R.reduce के साथ सरणी को पुनरावृत्त करना होगा, R.assocPath का उपयोग करना होगा, एक नया ऑब्जेक्ट प्राप्त करना होगा, आदि...

const { reduce, assocPath } = R

const fn = reduce((o, key) => assocPath([key, 'a'], 'value', o))

const obj = { 1: { }, 2: { }, 3: { } }
const arr = ['1', '2']

const result = fn(obj)(arr)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
1
Ori Drori 29 अक्टूबर 2019, 13:39

आपको .forEach() के साथ ऐसा करने में सक्षम होना चाहिए:

arr.forEach(key => obj[key] = { a: 'value' });

.map() फ़ंक्शन स्रोत सरणी के तत्वों से एक नई सरणी बनाने के लिए है, और आपको ऐसा करने की आवश्यकता नहीं है।

1
Pointy 29 अक्टूबर 2019, 13:29