Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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中具有相同数组值的对象_Javascript_Arrays_Reactjs_React Native_Sorting - Fatal编程技术网

移除数组javascript中具有相同数组值的对象

移除数组javascript中具有相同数组值的对象,javascript,arrays,reactjs,react-native,sorting,Javascript,Arrays,Reactjs,React Native,Sorting,我有这样的数组: [ {givenName: "Name 1", phoneNumbers: [ {label: "mobile", id: "5", number: "097 726 94 36"}, {label: "other", id: "558", number: "0977269436"},

我有这样的数组:

[
    {givenName: "Name 1", phoneNumbers: [
        {label: "mobile", id: "5", number: "097 726 94 36"},
        {label: "other", id: "558", number: "0977269436"},
        {label: "other", id: "559", number: "0977269436"}
    ]},
    {givenName: "Name 2", phoneNumbers: [
        {label: "mobile", id: "5", number: "0968234838"},
        {label: "other", id: "558", number: "0966766555"},
        {label: "other", id: "559", number: "0966766555"}
    ]},
    {givenName: "Name 3", phoneNumbers: [
        {label: "other", id: "558", number: "0965777238"},
        {label: "other", id: "559", number: "0965777238"}
    ]},
]
然后我过滤
数字
,得到小于或等于10位的
数字。
然后返回一个数组,其中的项与编号不匹配

然后我遍历上面的每一项,然后将其放入一个空数组中,以获得每个单独的项

我的最终结果如下:

[
    {givenName: "Name 1", phoneNumbers: "0977269436"},
    {givenName: "Name 2", phoneNumbers: "0968234838"},
    {givenName: "Name 2", phoneNumbers: "0966766555"},
    {givenName: "Name 3", phoneNumbers: "0965777238"}
]
下面是我的代码,它工作正常

我只是想问问是否有比我的代码更好的方法

const contacts=[
{givenName:“姓名1”,电话号码:[
{标签:“手机”,id:“5”,号码:“097 726 94 36”},
{标签:“其他”,id:“558”,编号:“0977269436”},
{标签:“其他”,id:“559”,编号:“0977269436”}
]},
{givenName:“姓名2”,电话号码:[
{标签:“手机”,id:“5”,号码:“0968234838”},
{标签:“其他”,id:“558”,编号:“0966766555”},
{标签:“其他”,id:“559”,编号:“0966766555”}
]},
{givenName:“姓名3”,电话号码:[
{标签:“其他”,id:“558”,编号:“0965777238”},
{标签:“其他”,id:“559”,编号:“0965777238”}
]},
]
常量listContactsLocal=[];
const contactFilter=contacts.map((项目)=>{
const listPhone=项目?.phoneNumber.filter((电话,索引)=>{
返回(
索引===项目?.PhoneNumber.findIndex((obj)=>{
如果(phone.number.length>11){
返回;
}
返回obj.number==phone.number;
})
);
});
返回{
givenName:物品?givenName,
电话号码:listPhone,
};
});
contactFilter.map((项目)=>{
返回项目?.phonenumber.map((电话)=>{
返回列表ContactsLocal.push({
givenName:物品?givenName,
电话号码:电话?号码,
});
});
});
console.log(listContactsLocal)

.as console wrapper{min height:100%;}
您可以将其简化为
reduce()
flatMap
中调用,以展平生成的嵌套数组

const contacts=[{givenName:“Name 1”,phonenumber:[{label:“mobile”,id:“5”,number:“097 726 94 36”},{label:“other”,id:“559”,number:“0977269436”},{givenName:“Name 2”,phonenumber:[{label:“mobile”,id:“5”,number:“0968234838”},{label:“other”,id:“558”,号码:“0966766555”},{label:“other”,id:“559”,number:“0966766555”},{givenName:“Name 3”,电话号码:[{label:“other”,id:“558”,number:“0965777238”},{label:“other”,id:“559”,number:“0965777238”},];
常数
isFirstInstance=(number,index,arr)=>arr.findIndex(o=>o.number==number)==index,
结果=contacts.flatMap({givenName,phoneNumbers})=>(
reduce((acc,{number},i)=>{
if(number.length<11&&isFirstInstance(number,i,phoneNumbers)){
acc.push({givenName,phonenumber:number})
}
返回acc;
}, [])
));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以将其简化为
reduce()
flatMap
中调用,以展平生成的嵌套数组

const contacts=[{givenName:“Name 1”,phonenumber:[{label:“mobile”,id:“5”,number:“097 726 94 36”},{label:“other”,id:“559”,number:“0977269436”},{givenName:“Name 2”,phonenumber:[{label:“mobile”,id:“5”,number:“0968234838”},{label:“other”,id:“558”,号码:“0966766555”},{label:“other”,id:“559”,number:“0966766555”},{givenName:“Name 3”,电话号码:[{label:“other”,id:“558”,number:“0965777238”},{label:“other”,id:“559”,number:“0965777238”},];
常数
isFirstInstance=(number,index,arr)=>arr.findIndex(o=>o.number==number)==index,
结果=contacts.flatMap({givenName,phoneNumbers})=>(
reduce((acc,{number},i)=>{
if(number.length<11&&isFirstInstance(number,i,phoneNumbers)){
acc.push({givenName,phonenumber:number})
}
返回acc;
}, [])
));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以在javascript中使用Set来获得唯一编号,并在下面添加此逻辑:

    let my_new_array = [].concat.apply([],contacts.map(obj => {
        let numberArray = [...new Set(obj.phoneNumbers.map(phoneobj => 
             phoneobj.number.replace(/\s+/g, '')))]
          return numberArray.map(number => ({
          givenName: obj.givenName,
          phoneNumbers: number
      }))
    }))
我在我的IDE中测试它,这就是结果


您可以在javascript中使用Set来获得唯一的编号,并在下面添加此逻辑:

    let my_new_array = [].concat.apply([],contacts.map(obj => {
        let numberArray = [...new Set(obj.phoneNumbers.map(phoneobj => 
             phoneobj.number.replace(/\s+/g, '')))]
          return numberArray.map(number => ({
          givenName: obj.givenName,
          phoneNumbers: number
      }))
    }))
我在我的IDE中测试它,这就是结果


您只需减少一次:

const res = contacts.reduce((acc, cV) => {
   acc.push({
    givenName: cV.givenName,
    phoneNumber: cV.phoneNumbers?.find(phone => phone.number.length <= 10)?.number,
  });
  return acc
}, []);
const res=contacts.reduce((acc,cV)=>{
加速推({
吉文纳姆:简历:吉文纳姆,

phoneNumber:cV.phoneNumbers?.find(phone=>phone.number.length您只需减少一次:

const res = contacts.reduce((acc, cV) => {
   acc.push({
    givenName: cV.givenName,
    phoneNumber: cV.phoneNumbers?.find(phone => phone.number.length <= 10)?.number,
  });
  return acc
}, []);
const res=contacts.reduce((acc,cV)=>{
加速推({
吉文纳姆:简历:吉文纳姆,


电话号码:简历。电话号码?查找(phone=>phone.number.length所以您总是想要一个电话号码?即使没有重复的电话号码?是的,我只想要一个电话号码。@GH05D这可能属于感谢您的信息@Pilchard。您总是想要一个电话号码吗?即使没有重复的电话号码?是的,我只想要一个电话号码。@Gh05dTh可能是属于感谢您的信息@pilchardYes,它工作得很好。是的,它工作得很好。我想把它拆分成单独的数组怎么样?对不起,我没有放平:)…我编辑了我的答案:DYeah,非常感谢:)我想把它拆分成单独的数组怎么样?对不起,我没有放平:)…我编辑了我的答案:啊,非常感谢:)
Name 2
值应该有两个不同的号码吗?你可以查看我的console.log.Ah,那么你的意思是如果有几个号码,那么每个不重复的号码都应该有自己的条目吗?是的。我只想有一个电话号码。
Name 2
值应该有两个不同的号码吗?你可以查看我的console.log.Ah,所以你可以