我使用两个已关联值的数组,这意味着arrayX[1]
与arrayY[1]
相关联,arrayX[2]
与arrayY[2]
相关联等等。
我现在需要过滤那个arrayX,以匹配或包含给定值,并且只覆盖arrayX filtered和匹配的arrayY。
我尝试使用键值创建一个数组/地图,我发现此链接Take object out of array based on attribute value ,然后使用'.find'进行过滤,但我无法获得预期结果。
我找到了此链接Take object out of array based on attribute value
当我调用函数来过滤我传递一个值时,例如我传递一个字符串'2010'
我的arrayX有:
(10)[“2008年12月”,“2010年2月”,“2010年4月”,“2010年7月”,“2010年12月”,“2011年2月”,“2012年4月”,“2013年7月”,“2014年3月“,”2017年5月“]
我的数组有:
(10)[1,7,4,1,10,11,4,8,7,10]
所以,对于我需要的输出
arrayX
为["Feb 2010", "Apr 2010", "Jul 2010", "Dec 2010"
]和
arraY
为[7, 4, 1, 10]
。
我需要值和过滤器的打字稿代码是:
filtr(dt){
console.log(dt);
console.log(this.arrayX);
console.log(this.arrayY);
//Array contains x and y values at the correct position
let array = [
{y: this.Yvalues, x: this.Xvalues}
];
let item : any = array.find(i => i.x.find(dt));
//new filtered x and y values on array
console.log(item)
}
我无法弄清楚我将如何做到这一点...我认为关键 - >价值是一个很好的解决方案,但我甚至没有输出.. 对不起,如果我错过了一些简单的事情......
答案 0 :(得分:2)
您可以使用array#reduce
并检查当前日期字符串中是否存在提供的值。然后将对应于该索引的日期和值从另一个数组添加到结果数组中。
const arrayX = ["Dec 2008", "Feb 2010", "Apr 2010", "Jul 2010", "Dec 2010", "Feb 2011", "Apr 2012", "Jul 2013", "Mar 2014", "May 2017"],
arrayY = [1, 7, 4, 1, 10, 11, 4, 8, 7, 10],
year = 2010,
result = arrayX.reduce((r, date, i) => {
if(date.includes(year)){
r.push({x: date, y: arrayY[i]})
}
return r;
},[]);
console.log(result);

要分别获取X和Y值,例如,为了图表,只需映射结果并迭代它,就像这样。
let x = result.map(({x}) => x);
let y = result.map(({y}) => y);
答案 1 :(得分:1)
请参阅下面的代码段。
您可以使用返回的结果,例如:result.newArrayX
和result.newArrayY
。这样您还可以保持原始阵列的安全。
arrayX = ["Dec 2008", "Feb 2010", "Apr 2010", "Jul 2010", "Dec 2010", "Feb 2011", "Apr 2012", "Jul 2013", "Mar 2014", "May 2017"];
arrayY = [1, 7, 4, 1, 10, 11, 4, 8, 7, 10];
function filterFunc(filterYear) {
return this.arrayX.reduce((acc, elem) => {
if (elem.split(' ')[1] == filterYear) {
acc.newArrayX.push(elem);
acc.newArrayY.push(this.arrayY[this.arrayX.indexOf(elem)])
}
return acc;
},{newArrayX: [], newArrayY: []}
);
}
result = this.filterFunc('2010');
console.log(result);