通过匹配 属性 个对象来过滤对象数组数组上的数组
Filter an array on array of arrays of objects by matching a property of objects
我有一个情况,我有一个数组数组,每个内部数组都有多个对象,如下所示:
const arrayOfArraysOfObjects = [
[
{ name: 'abv', id: '1212' },
{ name: 'gfgf', id: '887' },
{ name: 'John', id: '886' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '816' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '896' }
]
];
我想拉出包含 属性 id
与任何特定数字匹配的对象的数组,比如 896
我用 ES6 试过这个
rawList = arrayOfArraysOfObjects.filter(obj => Object.keys(obj).reduce((acc, curr) => acc || obj[curr] === my.id, false));
return rawList;
这里my.id是896
但这没有用,我的预期输出:
[
{ name: 'abv', id: '1012' },
{ name: 'gfgf', id: '881' },
{ name: 'John', id: '896' }
]
因此,尝试将其更正为:
rawList = arrayOfArraysOfObjects.map((apprGrp) => {
const filteredList = apprGrp.filter(obj => Object.keys(obj).reduce((acc, curr) => acc || obj[curr] === my.id, false));
return filteredList;
});
这也没有给我上面提到的期望结果。
请建议我如何更正此问题以获得所需的结果
您可以简单地使用数组过滤器和查找来按项目过滤
const arrayOfArraysOfObjects = [
[
{ name: 'abv', id: '1212' },
{ name: 'gfgf', id: '887' },
{ name: 'John', id: '886' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '816' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '896' }
]
];
console.log(arrayOfArraysOfObjects.filter(x => x.find(y => y.id === '896')).flat());
你可以查看这个解决方案。
const data = [
[
{ name: "abv", id: "1212" },
{ name: "gfgf", id: "887" },
{ name: "John", id: "886" },
],
[
{ name: "abv", id: "1242" },
{ name: "gfgf", id: "837" },
{ name: "John", id: "816" },
],
[
{ name: "abv", id: "1242" },
{ name: "gfgf", id: "837" },
{ name: "John", id: "896" },
],
];
const filterData = (id) => data.filter((arr) => arr.some((obj) => obj.id == id));
console.log(filterData(837));
由于您要查找具有所需 id
的单个子数组,请使用 Array.find()
而不是 Array.filter()
。使用 Array.some()
检查当前子数组是否包含 id
:
const data = [[{"name":"abv","id":"1212"},{"name":"gfgf","id":"887"},{"name":"John","id":"886"}],[{"name":"abv","id":"1242"},{"name":"gfgf","id":"837"},{"name":"John","id":"816"}],[{"name":"abv","id":"1242"},{"name":"gfgf","id":"837"},{"name":"John","id":"896"}]];
const findSubArray = id => data.find(arr => arr.some(o => o.id === id));
console.log(findSubArray('837'));
我有一个情况,我有一个数组数组,每个内部数组都有多个对象,如下所示:
const arrayOfArraysOfObjects = [
[
{ name: 'abv', id: '1212' },
{ name: 'gfgf', id: '887' },
{ name: 'John', id: '886' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '816' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '896' }
]
];
我想拉出包含 属性 id
与任何特定数字匹配的对象的数组,比如 896
我用 ES6 试过这个
rawList = arrayOfArraysOfObjects.filter(obj => Object.keys(obj).reduce((acc, curr) => acc || obj[curr] === my.id, false));
return rawList;
这里my.id是896
但这没有用,我的预期输出:
[
{ name: 'abv', id: '1012' },
{ name: 'gfgf', id: '881' },
{ name: 'John', id: '896' }
]
因此,尝试将其更正为:
rawList = arrayOfArraysOfObjects.map((apprGrp) => {
const filteredList = apprGrp.filter(obj => Object.keys(obj).reduce((acc, curr) => acc || obj[curr] === my.id, false));
return filteredList;
});
这也没有给我上面提到的期望结果。 请建议我如何更正此问题以获得所需的结果
您可以简单地使用数组过滤器和查找来按项目过滤
const arrayOfArraysOfObjects = [
[
{ name: 'abv', id: '1212' },
{ name: 'gfgf', id: '887' },
{ name: 'John', id: '886' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '816' }
],
[
{ name: 'abv', id: '1242' },
{ name: 'gfgf', id: '837' },
{ name: 'John', id: '896' }
]
];
console.log(arrayOfArraysOfObjects.filter(x => x.find(y => y.id === '896')).flat());
你可以查看这个解决方案。
const data = [
[
{ name: "abv", id: "1212" },
{ name: "gfgf", id: "887" },
{ name: "John", id: "886" },
],
[
{ name: "abv", id: "1242" },
{ name: "gfgf", id: "837" },
{ name: "John", id: "816" },
],
[
{ name: "abv", id: "1242" },
{ name: "gfgf", id: "837" },
{ name: "John", id: "896" },
],
];
const filterData = (id) => data.filter((arr) => arr.some((obj) => obj.id == id));
console.log(filterData(837));
由于您要查找具有所需 id
的单个子数组,请使用 Array.find()
而不是 Array.filter()
。使用 Array.some()
检查当前子数组是否包含 id
:
const data = [[{"name":"abv","id":"1212"},{"name":"gfgf","id":"887"},{"name":"John","id":"886"}],[{"name":"abv","id":"1242"},{"name":"gfgf","id":"837"},{"name":"John","id":"816"}],[{"name":"abv","id":"1242"},{"name":"gfgf","id":"837"},{"name":"John","id":"896"}]];
const findSubArray = id => data.find(arr => arr.some(o => o.id === id));
console.log(findSubArray('837'));