Как заменить значение ключа в объекте - PullRequest
0 голосов
/ 14 ноября 2018

Его я новичок в 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 приведены данные редуктора. Теперь я хочу получить некоторые данные из этого и выполнить некоторые манипуляции. но здесь он непосредственно обновляет значения моего редуктора, но я использовал оператор распространения, чтобы получить копию этих данных, но все же он обновляет значения редукторов.

Но я не получаю значение, которое ожидаю. Может ли кто-нибудь помочь мне с этим?

Ответы [ 5 ]

0 голосов
/ 14 ноября 2018
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);
0 голосов
/ 14 ноября 2018

Попробуйте это.

  result.map(el => {
        el.data = el.data.match(/^(\w+)/)[0];
        return el;
    })
0 голосов
/ 14 ноября 2018

Вы можете написать регулярное выражение, которое создает группу для значения до (, а затем получить его из совпадения

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);
0 голосов
/ 14 ноября 2018

Вам нужно получить доступ к свойству 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);

Но, поскольку вы используете реакцию, вы можете вместо этого использовать .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 нет необходимостибольше.

0 голосов
/ 14 ноября 2018

Вы можете использовать split('(') вместо регулярных выражений, чтобы получить тот же результат:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...