我知道有人问过百万次+ 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'->的顺序相同,因为这直接对选择进行建模。
由于很难对当前状态进行建模,因此我无法真正添加堆栈闪电。
答案 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;
}
现在它可以正常工作了。