Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从ID与React Native中的正则表达式匹配的对象数组中删除元素_Javascript_Arrays_React Native - Fatal编程技术网

Javascript 从ID与React Native中的正则表达式匹配的对象数组中删除元素

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

我将消息存储在状态中,并且很少有消息具有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",
   "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
是一个更好的选择:
单个标识符应仅用于表示单个概念。
没有这样做的特殊原因吗?