我有以下数组a,b如图所示?
var a = [
{id: 1, name: "phone"},
{id: 2, name: "nick"}
];
var b = [
{id: 7, parentId: 1, name: "phone_item1"},
{id: 8, parentId: 2, name: "phone_item2"},
{id: 9, parentId: 1, name: "nick_item1"},
{id: 10, parentId: 2, name: "nick_item2"}
];
//You want to filter by A array id
const filterIds = a.map(({ id }) => id);
//My attempt
const c = Object.values(b.reduce((r, c) => {
r[c.parentId] = r[c.parentId] || [];
r[c.parentId].push(c);
return r;
}, {}));
console.log(c)Run Code Online (Sandbox Code Playgroud)
我正在尝试获取以下二维数组:
[[
{id: 7, parentId: 1, name: "phone_item1"},
{id: 9, parentId: 1, name: "nick_item1"}
],[
{id: 8, parentId: 2, name: "phone_item2"},
{id: 10, parentId: 2, name: "nick_item2"}
]]
Run Code Online (Sandbox Code Playgroud)
生成的数组应该根据idarray a与parentIdof 的比较b,这样才能得到2D数组的这种样式。由于某种原因,我的尝试无法正常工作-您可以帮我吗?
如果我在这里遗漏了一些东西,不要担心-假设我正确理解了您的问题,一个简单的实现就是映射每一项,a以使映射返回bon匹配项之间的过滤后的子集bItem.parentId === aItem.id(其中aItem和bItem分别迭代各个列表的项) :
var a = [
{id: 1, name: "phone"},
{id: 2, name: "nick"}
];
var b = [
{id: 7, parentId: 1, name: "phone_item1"},
{id: 8, parentId: 2, name: "phone_item2"},
{id: 9, parentId: 1, name: "nick_item1"},
{id: 10, parentId: 2, name: "nick_item2"}
];
/* Map each item in a to a classification of b against a */
const result = a.map(aItem => {
/* For current aItem, return a subset of b, filtered by matches
on bItem.parentId === aItem.id (ie the classification criteria) */
return b.filter(bItem => bItem.parentId === aItem.id)
});
console.log(result)Run Code Online (Sandbox Code Playgroud)