複数の入れ子になったオブジェクトを含む配列をフィルタリングする必要があるAngular2でフィルタパイプを作成しようとしています。これらのオブジェクトは、Salesforceから来ていると、時々、次の例のようにネストされたオブジェクトが含まれます:彼らは複数のレベルに行く傾向がないので、入れ子オブジェクトの配列をフィルタリングする
Object {
Id: "a0436000001awB5AAI",
Name: "Some product",
Store__c: "a0436000001awC2JJU",
Product__c: "a0136000001UGzzAAG",
Product__r: Object {
Id: "a0136000001UGzzAAG",
Name: "Parent product",
...
},
...
}
ノーマルソート方法は非常にうまく機能しません。私は自分自身を書くことを試みてきましたが、私はそれを理解していないようです。ここに私が今持っているものがあります:
// # Filter Array of Objects
@Pipe({ name: 'filter' })
export class FilterArrayPipe implements PipeTransform {
transform(value, args) {
let filterKeys: string[];
if (args[1]) {
let parts = args[1].replace(' ', '').split(',');
filterKeys = parts;
}
if (!args[0]) {
return value;
} else if (value) {
return value.filter(item => {
for (let key in item) {
if ((typeof item[key] === 'string' || item[key] instanceof String && item[key]) && (item[key].indexOf(args[0]) !== -1)) {
if (filterKeys && filterKeys.length > 0) {
if (item[key] in filterKeys) {
return true;
}
}
else {
return true;
}
}
}
});
}
}
}
これはまったくうまくいきません。
このパイプフィルタで何を達成したいですか? –
あなたのコードは、あなたがこのようにフィルタリングしようとしていることを示唆しています: "* ngFor ="#i of someArray |フィルタ: 'a0136000001UGzzAAG': 'Id、Sotre__c' "。正しいですか?また、 'in'演算子を間違って使用しています。 'if(item [key] in filterKeys)'で、配列をオブジェクトとともに使用する必要があります。 – Abdulrahman
@Abdulrahmanパイプを使用しようとしているところは、まさに正しいのですか? – watzon