[英]how to update a property in JSON array - Ramdajs
输入:
[{
message: 'A1 Message, B1 Message, C1 Message'
}, {
message: 'A1 Message, B1 Message'
}];
Output:
[{
message: 'C1 Message'
}, {
message: null
}];
识别特定消息“C1”(子字符串)并更新字符串或在对象数组中设置为 null
尝试了以下:
var input = [{
id: 1,
message: 'A1 Message, B1 Message, C1 Message'
}, {
id: 2,
message: 'A1 Message, B1 Message'
}];
var updateMessage = (obj) => {
var C1Message = R.pipe(
R.prop('message'),
R.splitAt(obj.message.indexOf('C1')),
R.last
)(obj);
return R.assoc('message', C1Message, obj);
}
var updateArray = R.map(R.when(R.pipe(R.prop('message'), R.includes('C1')), updateMessage));
var output = updateArray(input);
console.log(output);
如何使用ifElse将第二条object消息设置为null?
你可以进化数组中的每个 object。 对于每条message
,请尝试匹配您需要的消息格式。 如果未找到匹配项(空数组),则返回null
。 如果找到匹配项, R.match
的结果中取出第一个元素:
const { map, evolve, pipe, match, ifElse, isEmpty, always, head } = R const fn = map(evolve({ message: pipe( match(/C1[^,]+/), // match C1 message ifElse(isEmpty, always(null), // if empty assign null head // if not take the 1st element ) ) })) const data = [{ message: 'A1 Message, B1 Message, C1 Message' }, { message: 'A1 Message, B1 Message' }]; const result = fn(data) console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js" integrity="sha512-t0vPcE8ynwIFovsylwUuLPIbdhDj6fav2prN9fEu/VYBupsmrmk9x43Hvnt+Mgn2h5YPSJOk7PMo9zIeGedD1A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
动态使用 - 将 RegExp 作为参数传递:
const { map, evolve, pipe, match, ifElse, isEmpty, always, join } = R const fn = regexp => map(evolve({ message: pipe( match(regexp), // match a RegExp ifElse(isEmpty, always(null), // if empty assign null join(', ') // if not convert to a string ) ) })) const data = [{ message: 'A1 Message, B1 Message, C1 Message 1, C1 Message 2' }, { message: 'A1 Message, B1 Message' }]; const result = fn(/C1[^,]+/g)(data) console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js" integrity="sha512-t0vPcE8ynwIFovsylwUuLPIbdhDj6fav2prN9fEu/VYBupsmrmk9x43Hvnt+Mgn2h5YPSJOk7PMo9zIeGedD1A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.