首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新排序对象-将(剪切)对象复制到另一个

重新排序对象-将(剪切)对象复制到另一个
EN

Stack Overflow用户
提问于 2020-03-28 09:44:19
回答 2查看 42关注 0票数 1

数据

代码语言:javascript
复制
const data = [
  {
    "ID": 1,
    "parent": "0",
    "title": "Test-1"
  },
  {
    "ID": 2,
    "parent": "1",
    "title": "Test-1-1"
  },
  {
    "ID": 3,
    "parent": "0",
    "title": "Test-2"
  },
  {
    "ID": 4,
    "parent": "0",
    "title": "Test-3"
  },
  {
    "ID": 5,
    "parent": "4",
    "title": "Test-3-1"
  },
  {
    "ID": 6,
    "parent": "4",
    "title": "Test-3-2"
  },
];

业务:

代码语言:javascript
复制
let parents = data.filter(item => item.parent == "0");
let parents_children = parents.map(item => item.children = data.filter(stop => stop.parent == item.ID));

console.log(parents_children);根本不起作用。

console.log(parents);工作得很好。但我不明白为什么..。let parents_children是如何影响let parents的?有什么更好的解决方案来存档吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-28 09:47:21

分配和返回必须是不同的

代码语言:javascript
复制
let parents_children = parents.map(item => {
   item.children = data.
           filter(stop => stop.parent == item.ID);
   return item;
});

//性能更好的

代码语言:javascript
复制
let result = data2.reduce((map, cur) => {
  if (cur.parent === "0") {
    // parent
    map[cur.ID] = map[cur.ID] || { children: [] };
    map[cur.ID] = { ...map[cur.ID], ...cur };
  } else {
    if (!map[cur.parent]) map[cur.parent] = { children: [] };
    map[cur.parent].children.push(cur);
  }
  return map;
}, {});
let finalResult = [];
for (const key in result) {
  finalResult.push(result[key]);
}
console.log(JSON.stringify(finalResult, null, 4));

工作样本:

代码语言:javascript
复制
const data = [
  { ID: 1, parent: "0", title: "Test-1" },
  { ID: 2, parent: "1", title: "Test-1-1" },
  { ID: 3, parent: "0", title: "Test-2" },
  { ID: 4, parent: "0", title: "Test-3" },
  { ID: 5, parent: "4", title: "Test-3-1" },
  { ID: 6, parent: "4", title: "Test-3-2" }
];

let parents = data.filter(item => item.parent == "0");
let parents_children = parents.map(item => {
  // create new object
  return {
    ...item,
    children : data.filter(stop => stop.parent == item.ID)
  };
});
console.log(JSON.stringify(parents_children, null, 4));
console.log(data);


const data2 = [
  { ID: 1, parent: "0", title: "Test-1" },
  { ID: 2, parent: "1", title: "Test-1-1" },
  { ID: 3, parent: "0", title: "Test-2" },
  { ID: 4, parent: "0", title: "Test-3" },
  { ID: 5, parent: "4", title: "Test-3-1" },
  { ID: 6, parent: "4", title: "Test-3-2" }
];

// Better performance


let result = data2.reduce((map, cur) => {
  if (cur.parent === "0") {
    // parent
    map[cur.ID] = map[cur.ID] || { children: [] };
    map[cur.ID] = { ...map[cur.ID], ...cur };
  } else {
    if (!map[cur.parent]) map[cur.parent] = { children: [] };
    map[cur.parent].children.push(cur);
  }
  return map;
}, {});
let finalResult = [];
for (const key in result) {
  finalResult.push(result[key]);
}
console.log(JSON.stringify(finalResult, null, 4));
代码语言:javascript
复制
.as-console-row {color: blue!important}

票数 1
EN

Stack Overflow用户

发布于 2020-03-28 09:46:09

我想你忘了从.map()回来了。

尝试以下几点:

代码语言:javascript
复制
let parents_children = parents.map(item => {
   item.children = data.filter(stop => stop.parent == item.ID)
   return item;
});

我希望这能帮到你!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60899517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档