我有这个要过滤的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']
这是我在filteredData中得到的:
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,我只希望从“测试”数组中删除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'}
]
因此,在这里简单地说,我正在尝试从“测试”数组中删除任何未包含在特定代理商的关联数组字符串中的项目,同时将所有其他代理商和关联数据保持原样,但我不确定如何准确地得到这个。
我尝试搜索相同的问题,但找不到类似的内容。很抱歉,如果以前已经回答过此类问题,但是如果有人可以帮助我,那将是很好的。
将尝试获取可复制的演示链接并在需要时对其进行编辑,这样可以很容易地准确理解我在此处想要实现的目标。
可复制的演示链接: https://codesandbox.io/s/cool-resonance-drv0i
我在这里想要的是仅在表中显示所选复选框关联编号中的数据,因此,如果我从任何一个框中选择或取消选择,以前从其他框中选择/取消选择的数据都不会消失。
答案 0 :(得分:1)
如果您只想按传递的-关联数组进行过滤,则应做到简单:
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'},
{agency:'SOME AGENCY 3',id:'10',association:'2433982101'},
{agency:'SOME AGENCY 3',id:'11',association:'1917852501'}]
答案 1 :(得分:0)
要获得预期的过滤器行为,请删除t.agency === agency
crtiera,以仅包括在指定的association
列表中具有渐变的项目:
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'])
这里有working example供您尝试