为数组中的每个数组元素创建一个额外的对象奇怪的行为

22 浏览
0 Comments

为数组中的每个数组元素创建一个额外的对象奇怪的行为

为什么第一个示例没有给我期望的结果,但第二个示例给了。它们基本上是一样的。我期望的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

0