Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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_Angular_Ecmascript 6_Functional Programming - Fatal编程技术网

Javascript 在数组对象中筛选数组后返回值

Javascript 在数组对象中筛选数组后返回值,javascript,angular,ecmascript-6,functional-programming,Javascript,Angular,Ecmascript 6,Functional Programming,我试图创建一个自动完成,它使用函数返回一个对象数组。我的目标是: this.vehiclesList = [ { "additionalDriverContacts": [9929929929, 9992992933, 9873773777], "id": 1 }, { "additionalDriverContacts": [8388388388, 8939939999], "id": 2 } ] 我想根

我试图创建一个自动完成,它使用函数返回一个对象数组。我的目标是:

this.vehiclesList =
  [
    {
      "additionalDriverContacts": [9929929929, 9992992933, 9873773777],
      "id": 1
    },
    {
      "additionalDriverContacts": [8388388388, 8939939999],
      "id": 2
    }
  ]
我想根据additionalDriverContacts过滤数组

我的功能如下:

filterVehicleAdditionalMobile(val: string) {
     if (typeof val != 'string') {
            return [];
        }
    let value= val? this.vehiclesList.filter((item) => {
            if(item.additionalDriverContacts) 
                 item.additionalDriverContacts.forEach((option)=> {
                   String(option).toLowerCase().indexOf(val.toLowerCase()) != -1 
                })
             }
     }) : this.vehiclesList;
    console.log(value)
    return value;
}
但在控制台中,值是空数组。我哪里出错了。我试着寻找这个问题的答案 但是它没有帮助,因为我的用例是不同的

我想要的结果应该是: 如果将99299作为参数传递给函数,则与该数字匹配的additionalDriverContacts应作为数组返回。
对于输入99299,应返回结果=[99299929933]

更新:问题的最后一次编辑

尝试通过以下方式进行更改:

  filterVehicleAdditionalMobile(val: string) {
    if (typeof val !== 'string') {
      return [];
    }

    let driverContacts = [];
    this.vehiclesList.forEach((vehicule) => {
      if (vehicule.additionalDriverContacts) {
        if (val) {
          driverContacts = driverContacts.concat(vehicule.additionalDriverContacts.filter((driverContact) => {
            return String(driverContact).toLowerCase().indexOf(val.toLowerCase()) !== -1;
          }));
        } else {
          driverContacts = driverContacts.concat(vehicule.additionalDriverContacts);
        }
      }
    });

    return driverContacts;
  }
测试:

const driver = this.filterVehicleAdditionalMobile('8');
console.log(driver);
显示:

0:9873773777 1: 8388388388
2:8939939999

因此,您需要在这里首先将
车辆列表
中的每个项目转换为一个匹配结果数组,然后将它们连接在一起

尝试一下:

var车辆列表=[{
“其他驱动器触点”:[99299299299299339873773777],
“id”:1
},
{
“其他驱动器触点”:[83883883888939939999],
“id”:2
}
];
功能过滤器车辆附加移动(val){
if(typeof val!=“string”){
返回[];
}
//数组的数组
常量值=车辆列表.map((项目)=>{
如果(!item.additionalDriverContacts){return[];}
返回项.additionalDriverContacts.filter((选项)=>
字符串(选项).toLowerCase().indexOf(val.toLowerCase())!=-1
);
});
console.log(值);
//压扁
返回Array.prototype.concat.apply([],值);
}
console.log(filterVehicleAdditionalMobile('99')
对于输入
99299
,应返回结果=
[99299929933]

我们可以使用数组
.map()
提取联系人,然后使用字符串
.search()
进行筛选:

const vehiclesList=[
{“id”:1,“additionalDriverContacts”:[9929929929939873773777],
{“id”:2,“additionalDriverContacts”:[83883883888939939999]}]
结果=getMatchingContacts(车辆列表,99299)//运行测试
console.log(result)//显示结果
函数getMatchingContacts(列表,键){
const arrayOfContacts=list.map(item=>item.additionalDriverContacts)
const contacts=[].concat(…arrayOfContacts)//展平嵌套数组
.filter(contact=>contact.toString().search(key.toString())>=0)//查找匹配项
返回联系人

}
注意:您最初使用的是
此.vehicleList
,但您的代码后来使用的是
:此.vehicleList
-extra
s
。另外,您的
字符串(选项)
行是一个孤立的表达式。代码中没有JSON。它是一个JavaScript对象。我会一直指出这一点,直到我死的那天。谢谢你指出了这个错误。我更新了it@ChrisG编辑。Thanxy您的筛选器不返回任何内容,因此所有内容都被concidered为false,然后您将一无所获:)您的解决方案将返回所有数组项的列表,而不是特定的匹配数组项。还有一些语法错误。我保留了代码的逻辑,因为您在过滤器中不使用“val”,这将导致类似的情况。您希望将车辆保留在val与其中一个additionnalDriverContacts匹配的位置?所有匹配的值都应位于array@UdG你看过我的答案了吗?没有,它不起作用。在进行控制台操作时,如果matches@UdG上述两种方法都会生成一个数组,如单击“运行代码段”按钮时所示。在第一个示例中,在将值连接在一起之前,我将记录
变量,因此请记住向下滚动查看最终值。或者,您是说当您将其适应于自己的代码时,它不会产生期望的结果?