我有一个带有ID的对象(建议)数组和一个仅包含ID(属性)的数组。我需要使用在属性中具有相似ID的建议中的对象创建一个新数组。
suggestions:
Name:"NAME_1"
Value:"16"
id:"295748b6-bf55-4225-add8-aaf000e4825a"
Name:"NAME_2"
Value:"something"
id:"68a65c6d-5a09-4e8a-8583-aaf000e4825a"
Name:"NAME_3"
Value:"4"
id:"69984329-eed1-47a2-8806-aaf000e4825a"
...
属性:
attributes:Array[3]
0:"69984329-eed1-47a2-8806-aaf000e4825a"
1:"295748b6-bf55-4225-add8-aaf000e4825a"
2:"68a65c6d-5a09-4e8a-8583-aaf000e4825a"
功能:
const chosenAttributes = this.suggestions.filter(
item => this.attributes.includes(item.id)
);
this.chosenAttributes = chosenAttributes;
输出:
chosenAttributes:Array[3]
0:Object
Name:"NAME_1"
Value:"16"
id:"295748b6-bf55-4225-add8-aaf000e4825a"
1:Object
Name:"NAME_2"
Value:"something"
id:"68a65c6d-5a09-4e8a-8583-aaf000e4825a"
2:Object
Name:"NAME_3"
Value:"4"
id:"69984329-eed1-47a2-8806-aaf000e4825a"
这可行,但是我需要使新数组(chosenAttributes)中的对象与它们的ID出现在我的属性数组中的顺序相同。我不确定为什么从一开始就没有正确订购它们。
Vue 2.6.11
答案 0 :(得分:2)
Array.filter
不会更改初始数组的顺序,在您的情况下为suggestions
。如果您想要其他顺序(attributes
数组的顺序),则必须在额外的步骤中对新数组进行排序。
chosenAttributes.sort ( function (a, b)
{
return this.attributes.indexOf (a.id) - this.attributes.indexOf (b.id);
});
答案 1 :(得分:0)
听起来您只需要使用Javascript的Array sort
方法即可:
const chosenAttributes = this.suggestions
.filter(
item => this.attributes.includes(item.id)
)
.sort(item => /* return 1, 0, or -1 to indicate sorting */);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort有更多详细信息。