簡體   English   中英

如何更新 JSON 數組中的屬性 - Ramdajs

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM