javascript - 通过匹配值数组来对 javascript 对象文字进行子集化

标签 javascript filter

我需要对对象文字进行子集化 myData那些属于 group 的元素B year匹配 group 中找到的内容答:

var myData = [{"year":1,"group":"A","value":0.1},
 {"year":2,"group":"A","value":0.2},
 {"year":3,"group":"A","value":0.2},
 {"year":4,"group":"A","value":0.1},
 {"year":5,"group":"A","value":0.1},
 {"year":1,"group":"B","value":0.1},
 {"year":2,"group":"B","value":0.2},
 {"year":3,"group":"B","value":0.2},
 {"year":4,"group":"B","value":0.2},
 {"year":5,"group":"B","value":0.9},
 {"year":6,"group":"B","value":0.1}] ;

我可以使用.filter()获得所需的输出:

mySubset = myData.filter((d) => {return d.group == "B" && d.year < 6;});

结果:

[{"year":1,"group":"B","value":0.1},
  {"year":2,"group":"B","value":0.2},
  {"year":3,"group":"B","value":0.2},
  {"year":4,"group":"B","value":0.2},
  {"year":5,"group":"B","value":0.9}];

但这并不理想。我想要一个通用的、通用的解决方案,不依赖于“手动”输入最大值 (6)。另外,year可能不是一个序列(例如 [2, 1, 4, 5] )。

本质上,障碍在于条件的第二部分 ( d.year < 6 )。我需要一些与以下位置的值相匹配的东西:

let x = []

for(i = 0; i < myData.filter((d) => {return d.group == "A";}).length; i++){
    x.push(myData[i].year);
}

谢谢!

最佳答案

你已经成功了一半;现在您已经有了“A”组中所有年份的数组,您只需检查“B”组中的年份是否在该数组中。您可以使用 .includes() 来实现此目的。

mySubset = myData.filter((d) => {return d.group == "B" && x.includes(d.year);});

关于javascript - 通过匹配值数组来对 javascript 对象文字进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52192282/

相关文章:

javascript - 如何将 Child_process.spawn 的 "Promise"语法转换为 "async/await"语法

javascript - Vue.js - 如何在 html 页面中打印包含换行符的字符串变量(从过滤器返回)

php - 如何在 google map api v3 中创建可点击的图标?

javascript - 检测输入元素的焦点丢失,而不是 onBlur

javascript - 如何告诉 dropzone.js 上传完成?

android - 如何在android中搜索项目后更新 ListView

java - 根据两个条件 twitter API 过滤推文

matlab - 在 MatLab 中过滤噪声

mysql - 在mysql中使用多列过滤数据

javascript - 获取唯一选择器 jQuery