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