[英]Trying to filter array of object based on returned values
我有这个我要过滤的TypeScript对象数组,
const test: any[] = [
{agency: 'SOME AGENCY 1', id: '1', association: '2433982101'},
{agency: 'SOME AGENCY 1', id: '2', association: '2433982101'},
{agency: 'SOME AGENCY 1', id: '3', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '4', association: '2433982101'},
{agency: 'SOME AGENCY 2', id: '5', association: '2433982101'},
{agency: 'SOME AGENCY 2', id: '6', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '7', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '8', association: '2102923701'},
{agency: 'SOME AGENCY 3', id: '9', association: '2433982101'},
{agency: 'SOME AGENCY 3', id: '10', association: '2433982101'},
{agency: 'SOME AGENCY 3', id: '11', association: '1917852501'}
]
尝试使用以下值来过滤来自上面数组的数据我在onChange回调函数,
onChange = (agency: string) => (
association: string[]
) => {
}
// I am getting these values in callback
// agency = 'SOME AGENCY 2'
// association = ['2433982101', '2102923701']
// OR in another case
// agency = 'SOME AGENCY 1'
// association = ['2433982101']
我试图删除回调中特定代理商的关联数组中未返回的任何值。 我试图通过做这样的事情来过滤数组,
onChange = (agency: string) => (
association: string[]
) => {
const filteredData = test.filter(t =>
association.some(a => a === t.association && t.agency === agency)
);
console.log('Filtered Data: ', filteredData);
}
例如,在这种情况下1,
// agency = 'SOME AGENCY 2'
// association = ['2433982101', '2102923701']
这是我在过滤数据中得到的:
Filtered Data:
[
{agency: "SOME AGENCY 2", id: "4", association: "2433982101"},
{agency: "SOME AGENCY 2", id: "5", association: "2433982101"},
{agency: "SOME AGENCY 2", id: "8", association: "2102923701"}
]
所以这两个被淘汰了,这是正确的:
{agency: 'SOME AGENCY 2', id: '6', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '7', association: '1917874801'}
但我期待这样的输出,而不是我实际得到的。 在这里,对于给定的示例案例1,我只希望从'test'数组中删除id =“6”和“7”的项目
[
{agency: 'SOME AGENCY 1', id: '1', association: '2433982101'},
{agency: 'SOME AGENCY 1', id: '2', association: '2433982101'},
{agency: 'SOME AGENCY 1', id: '3', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '4', association: '2433982101'},
{agency: 'SOME AGENCY 2', id: '5', association: '2433982101'},
{agency: 'SOME AGENCY 2', id: '8', association: '2102923701'},
{agency: 'SOME AGENCY 3', id: '9', association: '2433982101'},
{agency: 'SOME AGENCY 3', id: '10', association: '2433982101'},
{agency: 'SOME AGENCY 3', id: '11', association: '1917852501'}
]
所以简单地说,我试图删除'test'数组中的任何项目,这些项目不包含在特定机构的关联数组字符串中,同时保留所有其他代理和关联数据,但我不确定如何准确得到这个。
我试着搜索同样的问题,但我找不到类似的东西。 我很抱歉,如果此类问题之前已经得到解答,但是如果有人能帮助我那会很棒。
将尝试获得可重现的演示链接并在需要时进行编辑,以便很容易理解我在这里想要实现的目标。
可重复的演示链接: https : //codesandbox.io/s/cool-resonance-drv0i
我想要的只是从选定的复选框关联号码中显示表中的数据,因此如果我从任何一个框中选择或取消选择,则其他框中先前选择/取消选择的数据不应消失。
如果你只想通过传入的关联数组进行过滤,你应该这样做:
const test = [
{agency: 'SOME AGENCY 1', id: '1', association: '2433982101'},
{agency: 'SOME AGENCY 1', id: '2', association: '2433982101'},
{agency: 'SOME AGENCY 1', id: '3', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '4', association: '2433982101'},
{agency: 'SOME AGENCY 2', id: '5', association: '2433982101'},
{agency: 'SOME AGENCY 2', id: '6', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '7', association: '1917874801'},
{agency: 'SOME AGENCY 2', id: '8', association: '2102923701'},
{agency: 'SOME AGENCY 3', id: '9', association: '2433982101'},
{agency: 'SOME AGENCY 3', id: '10', association: '2433982101'},
{agency: 'SOME AGENCY 3', id: '11', association: '1917852501'}
];
onChange = (agency: string) => (association: string[]) => {
const filteredData = test.filter(t =>
(agency === t.agency) ? association.includes(t.association) : t
);
console.log('Filtered Data: ', filteredData);
};
onChange('SOME AGENCY 2')(['2433982101', '2102923701']);
[{agency:'SOME AGENCY 1',id:'1',association:'2433982101'},
{agency:'SOME AGENCY 1',id:'2',association:'2433982101'},
{agency:'SOME AGENCY 1',id:'3',association:'1917874801'},
{agency:'SOME AGENCY 2',id:'4',association:'2433982101'},
{agency:'SOME AGENCY 2',id:'5',association:'2433982101'},
{agency:'SOME AGENCY 2',id:'8',association:'2102923701'},
{agency:'SOME AGENCY 3',id:'9',association:'2433982101'},
{代理:'SOME AGENCY 3',id:'10',协会:'2433982101'},
{代理:'SOME AGENCY 3',id:'11',协会:'1917852501'}]
要获得预期的过滤器行为,请删除t.agency === agency
crtiera以仅包含在指定association
列表中具有asscoations的项目:
const onChange = (agency: string) => (association: string[]) => {
const filteredData = test.filter(t => association.some(a => a === t.association));
console.log('Filtered Data: ', filteredData);
}
onChange('SOME AGENCY 2')(['2433982101', '2102923701'])
这是一个可以尝试的工作示例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.