我需要对对象文字进行子集化 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/