【问题标题】:In JavaScirpt, how do I filter the elements of the same field in two arrays and return a new two-dimensional array在JavaScript中,如何过滤两个数组中相同字段的元素并返回一个新的二维数组
【发布时间】:2019-07-10 06:53:35
【问题描述】:

这是一个例子:

我想根据arry1中的字段重新组合arry2

var arry1 = [
  {id: 1, parentId: 0, name: "phone"},
  {id: 2, parentId: 1, name: "nick"}
];

var arry2 = [
  {id: 7, parentId: 0, name: "phone_item1"},
  {id: 8, parentId: 1, name: "phone_item2"},
  {id: 9, parentId: 0, name: "nick_item1"},
  {id: 10, parentId: 1, name: "nick_item2"}
];


let newArrys = arry1.filter((item)=>{
   return leve_two.indexOf(arry2.parentId) == -1
})

我要返回一个二维数组:

[[
  {id: 7, parentId: 0, name: "phone_item1"},
  {id: 9, parentId: 0, name: "nick_item1"}
],[
  {id: 8, parentId: 1, name: "phone_item2"},
  {id: 10, parentId: 1, name: "nick_item2"}
]]

我试过Array.filter等等。

你能帮帮我吗?

【问题讨论】:

  • 请查看minimal reproducible example。如果您尝试过Array.filter(),我们需要看到它来修复它。
  • arry1 与结果有何关系?结果只是按 parentId 对元素进行分组?

标签: javascript arrays object filter javascript-objects


【解决方案1】:

您可以使用filter() 方法和Object.values() 来获得所需的输出:

const arr1 = [
  {id: 1, parentId: 0, name: "phone", level: 0, productCount: 0},
  {id: 2, parentId: 1, name: "nick", level: 0, productCount: 0}
];

const arr2 = [
  {id: 7, parentId: 0, name: "phone_item1", level: 1, productCount: 0},
  {id: 8, parentId: 1, name: "phone_item2", level: 1, productCount: 0},
  {id: 9, parentId: 0, name: "nick_item1", level: 1, productCount: 0},
  {id: 10, parentId: 1, name: "nick_item2", level: 1, productCount: 0}
];

const filterIds = arr1.map(({ parentId }) => parentId);

const arr3 = Object.values(arr2.reduce((r, c) => {
  r[c.parentId] = r[c.parentId] || [];
  r[c.parentId].push(c);
  return r;
}, {}));

console.log(arr3);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 如果 arr2 parentId 按其 arr1 id 分类怎么办?
  • 你能再给我一些指针吗?
【解决方案2】:

看起来就像将arry2 分组parentIdarry1 看起来没用?

为此使用一些库。例如 Ramda 方式:

const result = R.pipe(
  R.groupBy(R.prop("parentId")),
  R.toPairs,
  R.map(R.last)
)(arry2)

【讨论】:

  • 非常感谢您的回答,但这不是我想要的
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2021-05-07
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多