[英]How to replace a value of a key in a object
他我是新來的react redux
。 我有一個像這樣的對象數組,
let result = [ {Id :'a',temp:5,data:'abc (c:1'},{Id :'a',temp:5,data:'pqr (c:1'}{Id :'a',temp:5,data:'xyz (c:1'}]
現在,我想做的是有一個名為data
鍵,該鍵具有一些值,我想僅在該數據鍵中采用該括號之前的值。
我想看的東西,
{Id :'a',count:5,data:'abc'}
我所擁有的是,我有一個正則表達式,可以用來獲取該值,
我已經使用過循環了
for (let i = 0; i <= result.length - 1; i++) {
let regex = /^[^\(]+/;
let value = data.match(regex)[0].trim();
result[i].data = value
}
fetchQuestions() {
let previous_data = { ...this.props.data };
let result = [];
for (let key in previous_data) {
result = [...result, ...previous_data[key]];
}
for (let i = 0; i <= result.length - 1; i++) {
let regex = /^(.*)\(/;
let value = result[i].technology.match(regex)[1].trim();
result[i].technology = value;
}
this.props.fetchQuestions(result);
}
在這個this.props.data
是化this.props.data
器數據。現在我要做的是,我必須從中獲取一些數據並進行一些操作。 但是在這里,它是直接更新我的化簡器值本身,但是我使用了散布運算符來獲取該數據的副本,但是仍然在更新化簡器值。
但是我沒有得到我期望的價值。 誰能幫我這個 ?
您可以編寫一個正則表達式,為之前的值創建一個組(
然后從匹配項中獲取它)
let result= [ { Id: 'a', temp: 5, data: 'abc (c:1' }, { Id: 'a', temp: 5, data: 'pqr (c:1' }, { Id: 'a', temp: 5, data: 'xyz (c:1' } ] for (let i = 0; i <= result.length - 1; i++) { let regex = /^(.*)\\(/; let value = result[i].data.match(regex)[1].trim(); result[i].data = value } console.log(result);
您需要在迭代時訪問每個對象的data
屬性,以便對其使用.match
:
let result = [{ Id: 'a', temp: 5, data: 'abc (c:1' }, { Id: 'a', temp: 5, data: 'pqr (c:1' }, { Id: 'a', temp: 5, data: 'xyz (c:1' }]; for (let i = 0; i <= result.length - 1; i++) { const { data } = result[i]; let regex = /^[^\\(]+/; let value = data.match(regex)[0].trim(); result[i].data = value; } console.log(result);
但是,看到您正在使用react時,您可以考慮使用.map
代替,它不會使原始對象發生變異:
let result = [{ Id: 'a', temp: 5, data: 'abc (c:1' }, { Id: 'a', temp: 5, data: 'pqr (c:1' }, { Id: 'a', temp: 5, data: 'xyz (c:1' }]; console.log( result.map(({ data, ...rest }) => ({ data: data.match(/^[^(]+[^( ]/)[0], ...rest })) );
請注意,如果您在正則表達式[^( ]
進行最終匹配的字符(除了(
或空格)以外的任何內容,則不再需要trim
。
您可以使用split('(')
而不是regex來獲得相同的輸出:
let result = [{ Id: 'a', temp: 5, data: 'abc (c:1' }, { Id: 'a', temp: 5, data: 'pqr (c:1' }, { Id: 'a', temp: 5, data: 'xyz (c:1' }]; for (let i = 0; i <= result.length - 1; i++) { let value = result[i].data.split('(')[0].trim(); result[i].data = value } console.log(result);
試試這個。
result.map(el => {
el.data = el.data.match(/^(\w+)/)[0];
return el;
})
let result = [ {Id :'a',temp:5,data:'abc (c:1'},{Id :'a',temp:5,data:'pqr (c:1'},{Id :'a',temp:5,data:'xyz (c:1'}]
const new_result = result.map((item) => {
let regex = /^[^\(]+/;
let value = item.data.match(regex)[0].trim();
item.data = value;
return item;
});
console.log(new_result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.