繁体   English   中英

使用 ramda.js assocPath 为多个键分配特定值?

[英]Assign multiple keys a certain value using ramda.js assocPath?

我对 JS 和 ramda.js 很陌生。 假设我有一个 object 由这样的空对象组成:

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

和由obj的选定键组成的数组。

arr = ['1', '2']

我需要的是在通过arr选择的键对象内创建一个特定的键值对,例如a: 'value' ,因此结果如下所示:

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

我已经尝试通过键.map

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

,并且还尝试了arr.forEach()的方法,但它不起作用,我相信我可能缺少一些基本知识? 或者是否有我应该使用的替代 ramda.js function?

您应该可以使用.forEach()做到这一点:

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

.map() function 用于从源数组的元素创建新数组,您不需要这样做。

看看我的解决方案

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

这也可以通过 ramda 的功能来实现

 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>

Ramda 方法是不可变的——它们不会改变原来的 object,而是返回一个新的。 R.assocPath 方法在这方面没有什么不同。 To update the object, you'll need to iterate the array with R.reduce, use R.assocPath, get a new object, etc...

 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM