【问题标题】:How to filter an objects where is employeeId equals to some value如何过滤employeeId等于某个值的对象
【发布时间】:2022-01-26 15:08:56
【问题描述】:

我正在使用 knockoutjs,但问题确实在 Javascript 域中。

我有变量vm.filteredSerivces(),其中包含所有员工的所有服务。 现在,我只想保留那些位于vm.filteredSerivces()[0].GroupedServices[x].EmployeeId == 3684 的filteredSerivces(x 是GroupedServices 对象列表中每个对象的索引号)

我尝试如下:

var filteredSrvcs = vm.filteredSerivces()[0].GroupedServices.filter(x => x.EmployeeId != Id).remove();
vm.filteredSerivces(filteredSrvcs );

但是我这样改变了结构,我在html中的绑定不对应。

有没有其他方法可以删除这个子子对象,并保持结构原样?

这里是

【问题讨论】:

  • 那张图片对我们来说完全没用。如果您需要minimal reproducible example 的帮助,请提供一些示例数据和预期结果
  • 我的对象 vm.filteredSerivces() 有子对象 GroupedServices,我想从名为 GroupedServices 的子对象中删除一些对象,正如您在照片上看到的那样,GroupedServices 有 2 个对象(带有ID:5247 和 5254)。我想从该 GroupedSerivces 对象中删除所有 Id != 来自某个数字的对象
  • 如果没有示例数据,我们应该如何运行您尝试过的代码并查看它产生了什么或哪里出错了。我们不知道vm.filteredSerivces() 返回了什么
  • 是的,我知道@charlietfl 在这里,你可以从 js 窗口看到结构,由于某种原因,它在从演示中单击时不起作用jsfiddle.net/jp9davhc
  • 所以你可能想遍历外部数组并过滤每个数组

标签: javascript knockout.js


【解决方案1】:

这是一个映射新对象数组的示例,过滤器设置为仅包含 Id == 2000 的 GroupedServices 项

let res = data.map(({ServiceTypeName, GroupedServices}) =>{
   GroupedServices= GroupedServices.filter(({Id}) => Id == 2000);
   return {ServiceTypeName,GroupedServices }
})

console.log(res)
<script>
  let data = 
  [
  {
    "ServiceTypeName": "Type 1",
    "GroupedServices": [{
      "Id": 1,
      "Name": "A"
    }, {
      "Id": 2,
      "Name": "A"
    },
    {
      "Id": 28456,
      "Name": "AGSADGJS"
    }]
 },
 {
 "ServiceTypeName": "Type 2",
    "GroupedServices": [{
      "Id": 1203,
      "Name": "AHASJ"
    }, {
      "Id": 2000,
      "Name": "AHSJD"
    },
    {
      "Id": 284536,
      "Name": "UEHNCK"
    }]
 }];
 </script>

【讨论】:

  • 是的!而已!我会接受你的回答,只是我需要在同一个例子中,附加子句 - GroupedServices.length &gt; 0 所以基本上,如果它是对象 GroupedServices 没有任何孩子,我也想删除一个对象 ServiceTypeName。谢谢
猜你喜欢
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2019-10-12
  • 1970-01-01
  • 2021-09-25
  • 2021-10-30
相关资源
最近更新 更多