簡體   English   中英

如何替換對象中鍵的值

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

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