为数组中的每个数组元素创建一个额外的对象奇怪的行为
为数组中的每个数组元素创建一个额外的对象奇怪的行为
为什么第一个示例没有给我期望的结果,但第二个示例给了。它们基本上是一样的。我期望的processedData2的控制台输出应该是:\n[\n {\n \"id\": \"someid\",\n \"parts\": [\n {\n \"part_id\": \"1\"\n }\n ]\n },\n {\n \"id\": \"someid\",\n \"parts\": [\n {\n \"part_id\": \"2\"\n }\n ]\n },\n {\n \"id\": \"someid\",\n \"parts\": [\n {\n \"part_id\": \"3\"\n }\n ]\n }\n]\n
\n就像第二个示例中一样。\n示例1(应该有效,因为\"processedData\"与第二个示例中的相同,但实际上没有):\n
let putData = [ { id: 'someid', parts: [ { part_id: '1', }, { part_id: '2', }, { part_id: '3', }, ], }, ]; let processedData = []; for (let i of putData) { for (let o in i.parts) { processedData.push(i); } } console.log('processed Data ', processedData); let processedData2 = processedData; console.log('processedData 2 before ', processedData2); for (let i = 0; i < processedData.length; i++) { console.log(processedData[i].parts[i]); processedData2[i].parts = [processedData[i].parts[i]]; console.log(processedData2[i].parts[i]); } console.log('processedData 2 after', processedData2);
\n第二个示例(正确工作):\n
let processedData = [ { id: 'someid', parts: [ { part_id: '1', }, { part_id: '2', }, { part_id: '3', }, ], }, { id: 'someid', parts: [ { part_id: '1', }, { part_id: '2', }, { part_id: '3', }, ], }, { id: 'someid', parts: [ { part_id: '1', }, { part_id: '2', }, { part_id: '3', }, ], }, ]; console.log('processed Data ', processedData); let processedData2 = processedData; console.log('processedData 2 before ', processedData2); for (let i = 0; i < processedData.length; i++) { console.log(processedData[i].parts[i]); processedData2[i].parts = [processedData[i].parts[i]]; console.log(processedData2[i].parts[i]); } console.log('processedData 2 after', processedData2);
\n这里是Stackblitz中的演示链接:\nhttps://stackblitz.com/edit/js-8iqqp7?file=index.js