Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重新排列对象-将对象复制(剪切)到另一个对象中_Javascript - Fatal编程技术网

Javascript 重新排列对象-将对象复制(剪切)到另一个对象中

Javascript 重新排列对象-将对象复制(剪切)到另一个对象中,javascript,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",

资料

操作:

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"
  },
];
console.log(父/子)根本不起作用


console.log(父母)工作正常。但我不明白为什么。。。
let parents\u children
如何影响
let parents
?有没有更好的解决方案来归档我要归档的内容?

我想您忘了从
.map()
返回

请尝试以下操作:

let parents = data.filter(item => item.parent == "0");
let parents_children = parents.map(item => item.children = data.filter(stop => stop.parent == item.ID));

我希望这有帮助

分配和返回必须不同

let parents_children = parents.map(item => {
   item.children = data.filter(stop => stop.parent == item.ID)
   return item;
});
//性能更好

let parents_children = parents.map(item => {
   item.children = data.
           filter(stop => stop.parent == item.ID);
   return item;
});
工作样本:

const数据=[
{ID:1,父项:“0”,标题:“Test-1”},
{ID:2,父项:“1”,标题:“Test-1-1”},
{ID:3,父项:“0”,标题:“Test-2”},
{ID:4,父项:“0”,标题:“Test-3”},
{ID:5,父项:“4”,标题:“Test-3-1”},
{ID:6,父项:“4”,标题:“Test-3-2”}
];
让parents=data.filter(item=>item.parent==“0”);
让parents\u children=parents.map(项=>{
//创建新对象
返回{
…项目,
子项:data.filter(stop=>stop.parent==item.ID)
};
});
log(JSON.stringify(parents_children,null,4));
控制台日志(数据);
常数数据2=[
{ID:1,父项:“0”,标题:“Test-1”},
{ID:2,父项:“1”,标题:“Test-1-1”},
{ID:3,父项:“0”,标题:“Test-2”},
{ID:4,父项:“0”,标题:“Test-3”},
{ID:5,父项:“4”,标题:“Test-3-1”},
{ID:6,父项:“4”,标题:“Test-3-2”}
];
//更好的性能
让结果=数据2.reduce((map,cur)=>{
如果(当前父项==“0”){
//母公司
map[cur.ID]=map[cur.ID]| |{子项:[]};
map[cur.ID]={…map[cur.ID],…cur};
}否则{
如果(!map[cur.parent])map[cur.parent]={children:[]};
映射[cur.parent].children.push(cur);
}
返回图;
}, {});
让finalResult=[];
for(常量输入结果){
最终结果推送(结果[键]);
}
log(JSON.stringify(finalResult,null,4))

。作为控制台行{color:blue!important}
@mokorana-check,我已经为您更新了更好的选项。非常感谢,效果非常好!但还有一个问题需要进一步理解:
console.log(data)
不再表示原始数据。以及
console.log(parents)
输出结果。因为,
item.children=data.filter(stop=>stop.parent==item.ID)此处u分配
子项
分配给原始数据。建议不要mutate@mokorana现在检查
//创建新对象
,始终像这样创建新对象
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));