Javascript 从ID与React Native中的正则表达式匹配的对象数组中删除元素
我将消息存储在状态中,并且很少有消息具有GUID格式的_id键,我正在尝试使用splice将其从状态中删除Javascript 从ID与React Native中的正则表达式匹配的对象数组中删除元素,javascript,arrays,react-native,Javascript,Arrays,React Native,我将消息存储在状态中,并且很少有消息具有GUID格式的_id键,我正在尝试使用splice将其从状态中删除 this.state.messages : [{ "_id":"1599906957896", "createdAt":"9/12/2020 10:35:57 AM +00:00", "text":"Message from Lakshay at 4:05&quo
this.state.messages : [{
"_id":"1599906957896",
"createdAt":"9/12/2020 10:35:57 AM +00:00",
"text":"Message from Lakshay at 4:05",
"user":{
"_id":"6a59e693-a12a-4f7a-9a11-ad195492f57f",
"avatar":"https://placeimg.com/140/140/any",
"name":"student1 User"
}
},
{
"_id":"1599907249640",
"createdAt":"9/12/2020 10:40:49 AM +00:00",
"text":"Sending at 4:10",
"user":{
"_id":"6a59e693-a12a-4f7a-9a11-ad195492f57f",
"avatar":"https://placeimg.com/140/140/any",
"name":"student1 User"
}
},
{
"_id":"f5f535eb-d11b-4c7a-8992-3893e5d432e2",
"createdAt":2020-09-12T10:40:40.911Z,
"text":"Sending at 4:10",
"user":{
"_id":"6a59e693-a12a-4f7a-9a11-ad195492f57f",
"avatar":"https://placeimg.com/140/140/any"
}
}]
我想删除遵循GUID模式的邮件
var pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
把它推回到状态。感谢您的帮助 您可以使用map在阵列中循环,并检查是否与
\u id
匹配,如果是,请使用splice删除对象
let消息=[{
“_id”:“1599906957896”,
“createdAt”:“2020年9月12日10:35:57上午+00:00”,
“文本”:“Lakshay在4:05发来的消息”,
“用户”:{
“_id”:“6a59e693-a12a-4f7a-9a11-ad195492f57f”,
“阿凡达”:https://placeimg.com/140/140/any",
“名称”:“student1用户”
}
},
{
“_id”:“1599907249640”,
“createdAt”:“2020年9月12日10:40:49上午+00:00”,
“文本”:“4:10发送”,
“用户”:{
“_id”:“6a59e693-a12a-4f7a-9a11-ad195492f57f”,
“阿凡达”:https://placeimg.com/140/140/any",
“名称”:“student1用户”
}
},
{
“_id”:“F535EB-d11b-4c7a-8992-3893e5d432e2”,
“createdAt”:“2020-09-12T10:40:40.911Z”,
“文本”:“4:10发送”,
“用户”:{
“_id”:“6a59e693-a12a-4f7a-9a11-ad195492f57f”,
“阿凡达”:https://placeimg.com/140/140/any"
}
}]
设模式=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
让结果=messages.map((message,index)=>!message['''u id'].匹配(模式)?message:messages.splice(index,1))
console.log(result)
正确的方法是使用筛选方法。如果模式不匹配,Map将返回一个undefined,因此数组将使用undefined而不是原始对象
const result = messages.filter(message => !message['_id'].match(pattern));
没有理由在这里使用
let
当你可以使用const
的时候,是吗?我不理解这样一个答案的观察结果。它不是使用一个称为messages的变量,而是使用const
、var
或let
的状态对象,这些变量根本不会影响答案,只需编写清晰、惯用的JavaScript即可。如果您不打算重新分配该值,const
是一个更好的选择:单个标识符应仅用于表示单个概念。
没有这样做的特殊原因吗?