我正在尝试编写一个通用组件(在这种情况下对数组进行排序),该组件事先不知道要排序的元素的类型。 它可以是直接元素,如果它是一个字符串,一个参数,如果它是一个对象,一个参数的参数等。
为此,我需要提供从父组件中排序的表达式。
例如在组件中:
array.sort((a: any, b: any): number => {
return a.[this.orderBy] > b.[this.orderBy] ? 1 : -1;
});
其中orderBy是这样的输入:'name'或'object.name'
基本上我想在HTML模板({{'..'}})中进行相同类型的表达式评估,但是在Typescript方法中。
有可能吗?
答案 0 :(得分:0)
尝试以下,
sort(){
let orderBy = "var1.var2";
// orderBy = "name";
let someArray = [{name: 'c', var1 : { var2 : 0}},{name: 'b', var1 : { var2 : 1 }}]
let result = someArray.sort((a: any, b: any): number => {
return this.resolve(a,orderBy) > this.resolve(b,orderBy) ? 1 : -1;
});
console.log(result);
}
resolve(obj, path){
path = path.split('.');
var current = obj;
while(path.length) {
if(typeof current !== 'object') return undefined;
current = current[path.shift()];
}
return current;
}
上面唯一的问题是你的对象属性名称不应该包含dot(.)
,如{ 'first.name' : 'c', var1 : { var2 : 0}}
,你也必须考虑边缘情况,如果路径不存在,那么你应该是好的。
选中Plunker。
希望这会有所帮助!!