根据角度为7的另一个对象数组对一个对象数组进行排序

时间:2019-09-09 10:00:12

标签: arrays angular typescript sorting filter

我知道有人问过百万次+ 1次。但是我发现这些问题/答案没有帮助。

我有2个数组,包含2个不同对象,一个字符串属性用于唯一标识它们。这将是排序的关键,但是所说的对象prop名称不相等(accessValue,modifiedOption)。但是它们的价值是!

 Object1: { ... accessValue, ... };

 Object2: { ..., modifiedOption, ... }; 

 array1:Object1[];

 array2:Object2[];

我想根据array2的对象频繁程度对array1进行排序。 因此,所有array1项的顺序都与array2相同。

这两个数组用于对连接的下拉选择系统进行建模,可以从中删除这些系统。加法使我感到困惑(最后添加的项目被附加到第一个位置,而不是最后一个),可能是因为下面的过滤器?

我用来添加新下拉菜单的内容:

 addFieldRow() {
    this.fieldRows.push(0); // since desired selection is not known yet but need to populate the array that represents the 1st selection so a 2nd main selection dropdown will appear on screen
  ...
  }

  public onSelect() {
     // if a selection is happened check the values of editOptions (contains data about all main selectable options) 
    this.fieldRows = this.editOptions.filter(
      option => this.selectedOptions.some(el => el.modifiedOption === option.accessValue)
    );
    this.disableSelected(); // disable already selected items (not related to my issue)
    this.optionSelected = true; // this is just for button disabled toggle
  }

所以我要么需要弄清楚我的addRow逻辑(如果它有任何缺陷),要么实现一个排序实用程序以确保fieldRows的对象与selectedOptions'->的顺序相同,因为这直接对选择进行建模。

由于很难对当前状态进行建模,因此我无法真正添加堆栈闪电。

1 个答案:

答案 0 :(得分:0)

好吧,我是个白痴! 因为我知道当前索引(因为我正在遍历fieldRows)。

我要做的就是替换这个:

public onSelect() {

    this.fieldRows = this.editOptions.filter(
      option => this.selectedOptions.some(el => el.modifiedOption === option.accessValue)
    );

与此:

  public onSelect(index) {

    this.fieldRows[index] = this.editOptions.find(option => this.selectedOptions[index].modifiedOption === option.accessValue);
    this.disableSelected();
    this.optionSelected = true;
  }

现在它可以正常工作了。