他是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
中是化简器数据。现在我要做的是,我必须从中获取一些数据并进行一些操作。但是在这里,它是直接更新我的reducer值本身,但是我使用了散布运算符来获取该数据的副本,但是仍然使用它来更新reducer值。
但是我没有得到我期望的价值。有人可以帮我吗?
答案 0 :(得分:2)
您可以编写一个正则表达式,为(
之前的值创建一个组,然后从匹配项中获取它
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);
答案 1 :(得分:1)
您需要在迭代时访问每个对象的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
。
答案 2 :(得分:0)
您可以使用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);
答案 3 :(得分:0)
尝试这个。
result.map(el => {
el.data = el.data.match(/^(\w+)/)[0];
return el;
})
答案 4 :(得分:0)
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);