[英]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.