数组与该数组中的元素分配的变量之间的怪异依赖关系

问题描述 投票:1回答:1

[更改从数组的元素分配的变量时,数组中的该特定元素随变量而变化。但是,数组中没有要更改的数组。

在代码中,数组是对象的数组,在函数randomCentroid(质心)中声明并分配了变量,该函数在initializeCentroid中被调用。

该代码用于生成有关k均值聚类的随机质心,因此代码:

//Return random centroid points with coloring
let randomCentroid = (fill) => {
  let r = Math.floor(Math.random()*points.length);
  let centroid = points[r];

  //points.splice(r, 1);
  centroid.fill = fill;
  return centroid;
}

//Gives distinct coloring to all centroid points
let initializeCentroids = (num) => {
  let allCentroids = [];
  for (let i = 0; i < num; i++) {
    let color = colors(i);
    let centroid = randomCentroid(color);
    centroid.id = 'centroid' + '-' + i;
    allCentroids.push(centroid);
  }
  return allCentroids;
}

//same for const.
let points = [{}, {}, {}, {}, {}],
  colors = d3.scaleOrdinal(d3.schemeCategory10);

initializeCentroids(3);

console.log(points);

控制台:

index.js:29

(5)[{…},{…},{…},{…},{…}]

0:{fill:“#2ca02c”,id:“ centroid-2”}

1:{}

2:{fill:“#ff7f0e”,id:“ centroid-1”}

3:{fill:“#1f77b4”,id:“ centroid-0”}

4:{}

长度:5

proto:数组(0)

如何删除由数组分配的对象组成的变量与数组之间的依赖关系?

javascript arrays d3.js dependencies k-means
1个回答
0
投票

此部分:

let centroid = points[r]

正在获取对点数组中对象的引用

当更改centriod时,您还要更改数组中的对象。

© www.soinside.com 2019 - 2024. All rights reserved.