typescript 获取与string匹配的所有数组/Map条目

wfypjpf4  于 2023-02-10  发布在  TypeScript
关注(0)|答案(2)|浏览(199)

我使用了两个关联了值的数组,这意味着arrayX[1]arrayY[1]关联,arrayX[2]arrayY[2]关联,以此类推。
现在我需要过滤arrayX,以匹配或包含给定值,并且只显示过滤后的arrayX和匹配的arrayY。
我试着创建一个数组/Map与键-值,我发现这个链接Take object out of array based on attribute value,然后过滤器与'.find',但我不能有预期的结果.
当我调用函数来过滤时,我传递了一个值,例如,我传递了一个字符串'2010'

  • 我的数组X具有:

(10)[“2008年12月”、“2010年2月”、“2010年4月”、“2010年7月”、“2010年12月”、“2011年2月”、“2012年4月”、“2013年7月”、“2014年3月”、“2017年5月”]

  • 我的阵列有:

(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)
}

我不知道我该怎么做...我认为key -〉value是一个很好的解决方案,但是我甚至不能有一个输出...抱歉,如果我错过了一些简单的东西。

ijxebb2r

ijxebb2r1#

可以使用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值,例如,为了绘制图表,只需Map结果并对其进行迭代,如下所示。

let x = result.map(({x}) => x);
let y = result.map(({y}) => y);
irtuqstp

irtuqstp2#

请参阅下面的代码片段。您可以使用返回的结果,如:result.newArrayXresult.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);

相关问题