数组数组中的 JavaScript 嵌套过滤器

2024-03-27

我有一个以下格式的对象数组:

var full_list = [
        {
            "pid": 1,
            "items":[
                {"item_id": '9'},
                {"item_id": '10'},
                {"item_id": '12'}
            ]
        },
        {
            "pid": 2,
            "items":[
                {"item_id": '33'},
                {"item_id": '22'},
                {"item_id": '65'}
            ]
        }...
    ];

我有一个 tmp 数组,其中包含完整数组中的对象:

 var tmp_list =  [
        {
            "pid": 2,
            "items":[
                {"item_id": '33'},
                {"item_id": '22'},
                {"item_id": '65'}
            ]
        }, {....}

我想从完整列表中过滤掉至少一个 selectedIDs 值出现在对象的项目 id 数组中的对象

var selectedIDs = {'1', '9', '45', ....};

然后将它们添加到 tmp 列表中。

我尝试使用过滤器,但未能完全弄清楚。

谢谢。

selectedIDs.forEach(function(id) {
                var tmp = full_list.filter(function (obj) {
                            obj.items.forEach(function (item) {
                                if (item.id === id) {
                                    console.log('found');
                                }
                            });
                        });
                        tmp_list.push(tmp);
                 });

首先,你问题中的这一行是错误的

var selectedIDs = {'1', '9', '45', ....};

您不能使用声明数组{}。而是使用[]

对于您的问题,您可以使用纯函数方法 using 数组#过滤器 and 数组#一些获得您想要的结果的方法如下:

var full_list = [
  {
    "pid": 1,
    "items":[
      {"item_id": '9'},
      {"item_id": '10'},
      {"item_id": '12'}
    ]
  },
  {
    "pid": 2,
    "items":[
      {"item_id": '33'},
      {"item_id": '22'},
      {"item_id": '67'}
    ]
  },
  {
    "pid": 9,
    "items":[
      {"item_id": '33'},
      {"item_id": '22'},
      {"item_id": '65'}
    ]
  },
  {
    "pid": 7,
    "items":[
      {"item_id": '7'},
      {"item_id": '22'},
      {"item_id": '65'}
    ]
  }
];

var tmp_list = [
  {
    "pid": 2,
    "items":[
      {"item_id": '7'},
      {"item_id": '22'},
      {"item_id": '65'}
    ]
  }
];


function filterResult (selectedItems) {
  return full_list.filter(function (process) {
    return process.items.some(function(item){
      return selectedItems.indexOf(item.item_id) > -1;
    });
  });
}

var selectedItems = ['9', '7', '22', '10'];

tmp_list = tmp_list.concat(filterResult(selectedItems))

console.log(tmp_list);


function flattenResults(list, selections) {
  return list.reduce(function (accumulator, current) {
    var res = current.items.filter(function(item){
      return (selections.indexOf(item.item_id) > -1 
              && checkIfAlreadyExist());
              
      function checkIfAlreadyExist () {
        return accumulator.every(function (k) {
          return k.item_id !== item.item_id;
        });
      }        
    });   

    return accumulator.concat(res);
  }, []);
}

console.log(flattenResults(full_list, selectedItems));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组数组中的 JavaScript 嵌套过滤器 的相关文章

  • 为具有可变内容的内联块元素提供相同的高度?

    我有 4 个宽度固定但内容可变的内联块元素 并且我希望所有这些元素具有相同的高度 最大元素的高度 请参见这个jsfiddle http jsfiddle net kKZXj 我应该如何实现这个目标 如果仅使用 css 无法做到这一点 那么使
  • javascript获取上周的第一天和最后一天[重复]

    这个问题在这里已经有答案了 我想用 javascript 获取上周的第一天 星期一 和最后一天 星期日 我已经检查过其他主题 但它不起作用 我还需要处理前一周是否是两个不同的月份 我正在使用此代码 但最后一个星期日是 06 03 2014
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • Chart.js 没有显示在我的视图中

    我有一个使用 angular js 运行的应用程序 我的视图之一应该加载图表 我正在使用 Chart js 但由于某种原因它不起作用 并且我的控制台上没有显示错误 这是我创建图表的函数 scope writeBatteryChart fun
  • 通过单击字段启用非活动字段

    是否可以有一组非活动字段 如果单击其中一个字段 则某些字段将变为必填字段并运行某些代码段 举例来说 您显示了三个字段
  • 按自定义字母顺序对数组进行排序

    如何对这样的数组进行排序 apple very auto tom tim violet 要按 v a t x b 等排序 不按字母顺序 violet very auto tom tim 在脚本中 我会做这样的事情 myArray sort
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re
  • 如何最好地实现多个重叠元素的翻转和推出事件?

    Problem 我正在开发一个网站 其中有一个 拨号盘 显示代表伞式公司不同部门的多个选项卡 目前我已经用 HTML CSS 准备好了一切 每个选项卡的定位 内圈处于较高位置z index因为选项卡在滚动时需要向外动画 我可以实现这部分 选
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 将服务连接到现有的流星帐户

    我正在设置一个流星应用程序 其中涉及使用用户名和密码进行注册 然后希望将该帐户与 Facebook 和 Twitter 连接起来 我只需使用帐户包即可轻松启动并运行第一部分 但是当我有一个登录用户调用 Meteor loginWithFac
  • RxJS - 从可观察对象中获取最后 n 个元素

    我想从可观察对象中获取最后 3 个元素 假设我的时间线是这样的 a b c d e f g h i j gt where a b c d e f g h i j are emitted values 每当发出新值时 我想立即获取它 因此它可
  • 获取键盘事件中的鼠标位置

    我试图在用户按住 Shift 键时出现选择轮 滚轮应以鼠标位置为中心 然而当我测试这个时 pageX and clientX两者在事件对象上都未定义 是否可以通过键盘事件获取鼠标坐标 不 只需跟踪mousemove事件并持续保存当前位置 以
  • Typeahead.js 干扰 Bootstrap 输入组

    如何防止 Typeahead js 拆分我的 Twitter Bootstrap 3 输入组 每当我将 Typeahead javascript 指向属于输入组一部分的文本区域时 连接的文本区域和提交按钮就会停止连接 这只是 Typeahe
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 检查 href 中是否存在 jQuery 中的查询字符串

    我目前有一段 jQuery 用于附加带有一些位置信息的 URL jQuery a attr href function return this href location 123 abc 我的问题是大多数链接都有一个 其中使用上面的 就可以
  • ERR_IMPORT_ASSERTION_TYPE_MISSING 用于导入 json 文件

    这段代码运行良好 我不知道是因为我升级到 Node 17 还是什么原因 但现在我明白了 TypeError ERR IMPORT ASSERTION TYPE MISSING Module file Users xxxxx code pro
  • 将 javascript 变量发送到服务器端 ASP .NET

    我需要在回发时将 JavaScript 数据传递到服务器端 Exvar jsVariableToPass new Object jsVariableToPass key1 value1 jsVariableToPass key2 value
  • 如何在变量名中使用变量

    所以我正在使用这样的 json 变量 opponentInvData item1 它包含项目 1 到 6 我需要动态访问不同的项目并将它们设置为空 itemNum 是我需要访问的特定项目 我正在尝试使用 eval 函数 var itemNu
  • 使用 Promise 语法编写同步代码有什么好处吗?

    有同步承诺这样的概念吗 使用 Promise 语法编写同步代码有什么好处吗 try foo bar a b bam catch e handleError e 可以写成类似的东西 但使用同步版本then foo then bar bind
  • addEventListener keydown 不起作用

    我在互联网上找到了一些基本的 Pong 代码 并尝试添加按键 代码在这里 http cssdeck com labs ping pong game tutorial with html5 canvas and sounds http css

随机推荐

  • 具有一元运算符的 IIFE:现实世界用例[重复]

    这个问题在这里已经有答案了 我们可以假装使用一元运算符作为 IIFE 如下所示 function return 5 5 function return 5 5 function return 5 6 function return 5 fa
  • 返回第一个字符为非字母的行

    我正在尝试检索 SQlite 中以任何非字母字符开头的所有列 但似乎无法使其工作 我目前已经得到了这段代码 但它返回每一行 SELECT FROM TestTable WHERE TestNames NOT LIKE A z 有没有办法检索
  • 为什么 LinkedBlockingQueue.take() 即使有元素也会阻塞?

    我有 10 个网络爬虫 它们共享一个LinkedBlockingQueue 从 Eclipse 中的调试视图中 我发现当我获取多个 URL 大约 1000 个 时 list take 通话时间很长 它是这样工作的 private synch
  • 从lua中的函数返回多个值

    我正在尝试以下 lua 代码 function test return 1 2 end function test2 return test end function test3 return test 3 end print test p
  • 如何在ios中永远运行后台服务以同步数据

    您好 我正在开发一个应用程序 它需要在网络服务器上进行同步操作 数据提交和检索 用户可以离线提交表单 即将数据存储到设备上的本地数据库 只要网络可用 后台服务就应该将这些数据提交到网络服务器 后台服务具体需求如下 后台服务会先检查网络是否可
  • Bluecove:以编程方式重新启动蓝牙堆栈

    我正在尝试关闭蓝牙服务 但 Bluecove 在连接关闭方法上有错误 https code google com p bluecove issues detail id 90 https code google com p bluecove
  • 如何编写能够验证 URI 的正则表达式模式?

    一个人如何着手创作一部正则表达式与所有有效 URI 字符串匹配 但无法与所有无效 URI 字符串匹配 为了具体说明我在提到 URI 时所指的内容 我在下面添加了最新 URI RFC 标准的链接 它定义了我想要使用正则表达式验证的实体 我不需
  • 如何在cpanel上托管Spring boot应用程序?

    我有一个 Spring boot 应用程序 我想将其托管在我的 VPS 服务器 cpanel 中 我正在使用最新版本的 cpanel 和 WHM 以及 easyapache 4 我完全按照该网站上的步骤操作 https dzone com
  • 在 AWK 脚本输出中的字段周围添加双引号吗?

    我编写了一个 awk 脚本 它将分发器平面文件转换为可导入 Magento 的 CSV 该文件以分号分隔 它没有像进口商要求的那样在每个字段周围加上引号 它工作得相当好 但在没有包含双引号的情况下导致数据导入出现一些问题 我花了几个小时试图
  • 使用 ReactiveCocoa 从对象数组链接异步操作

    我有一个实体数组 我想对这些实体执行异步操作 这些操作应该链接起来 并以与数组中的实体相同的顺序运行 我是 RAC 新手 在 RAC 中如何做到这一点 首先 您需要一个执行异步操作的包装方法 该方法将返回一个信号 我们假设异步操作需要一个完
  • std::max - 需要一个标识符

    我有问题std max 我想不通 int border 35 int myInt 2 int myOtherInt 3 int z std max myInt 2 border myOtherInt 2 border 我已经包含了算法标准头
  • 操作栏后退按钮不起作用

    在这些的帮助下安卓文档 http developer android com training implementing navigation ancestral html NavigateUp 我正在尝试做一个操作栏后退按钮 我得到一个操
  • pyttsx:没有名为“engine”的模块

    我正在尝试使用安装 TTS 包this http pyttsx readthedocs org en latest install html 一切都很好 直到我尝试执行以下命令 import pyttsx 我收到了这个错误 File usr
  • 从 GitHub 更新所有包

    我知道你可以使用以下语法从 CRAN 安装软件包 install packages c Rcpp dependencies TRUE 您可以使用以下命令从 CRAN 更新所有内容 update packages 另一方面 您可以使用以下命令
  • 没有虚拟方法 verifyPhoneNumber,致命异常:main

    将库更新到 Gradle 文件后 我在尝试通过电话号码进行身份验证后遇到此错误 beginning of crash 2020 11 04 00 33 11 574 23042 23042 com roko hearth E Android
  • Terraform:如何有条件地将 EBS 卷分配给 ECS 集群

    我有一个ecs cluster定义 ECS 集群的模块 我希望该模块可以重复使用 这样我就可以创建具有不同配置的各种集群 因此 我希望能够选择指定是否在 ECS 主机的启动配置中创建和附加 EBS 卷 我最初尝试使用count in the
  • Akka 2.1.2 Scheduler 出现问题(“系统”无法识别)

    根据这些示例 我试图运行一个非常简单的循环函数循环 http doc akka io docs akka 2 1 2 scala scheduler html http doc akka io docs akka 2 1 2 scala s
  • 如何在一个项目的不同版本中包含第 3 方代码

    我手上有一个有趣的问题 但我不太清楚处理它的正确方法 这是特定于 sitecore 的 但我想这个问题的解决方案可以应用于拥有多个运行不同版本框架的网站的任何人 现在我有 3 个独立的网站 运行 Sitecore 作为网站的框架和 CMS
  • Python - Win32Com - Outlook - 将今天发送的项目转发到收件箱

    我正在尝试创建一个脚本 将每天上午 8 00 起所有 Outlook 发送的项目转发到专用收件箱 该邮件必须保存在 Outlook 的已发送邮件文件夹中 目前我拥有今天的所有电子邮件 但脚本的转发部分不起作用 我没有任何错误消息 编辑 1
  • 数组数组中的 JavaScript 嵌套过滤器

    我有一个以下格式的对象数组 var full list pid 1 items item id 9 item id 10 item id 12 pid 2 items item id 33 item id 22 i