首页 > 解决方案 > JavaScript 对象数组中的增量 ID

问题描述

我是 JavaScript 编程的新手,然后我遇到了这样的奇怪案例。我有一个数组对象和一个数组,如下所示:

let data = [{"name": "Apple"} , {"name": "Orange"}, {"name": "Pineapple"}]
let selected = [];

我在单击data项目时实现单击,然后将所选对象data移至selected. 数据没有 ID,所以我创建了 ID,其位置索引位于selected. 但是如果有相同的对象,位置也是相同的。我在下面尝试了一些代码,但它不起作用。

1.

  const dataObject = {"name": "Apple"};
  dataObject['position'] = selected.length;
  selected.push(dataObject);      
  const dataObject = {"name": "Apple"};
  selected.push(dataObject);
  for(let i = 0; i<selected.length; i++) {
    selected[i]['position'] = i;
  }

奇怪的情况是,如果有相同的对象Apple, Orange, Apple,我在 Array 中得到错误的 ID,例如:

[{"name": "Apple", position: 2} , {"name": "Orange", position: 1}, {"name": "Apple", position: 2}]

编辑

这里是可重现的代码:

let data = [{"name": "Apple"} , {"name": "Orange"}, {"name": "Pineapple"}]
let selected = [];

const dataObject = {"name": "Apple"};
selected.push(dataObject);
selected.push(dataObject);
for(let i = 0; i<selected.length; i++) {
  selected[i]['position'] = i;
}

document.write('<br>' + JSON.stringify(selected));

// Output : [{"name":"Apple","position":1},{"name":"Apple","position":1}] 
// Output Expect: [{"name":"Apple","position":0},{"name":"Apple","position":1}] 

我的错误可能在哪里?

标签: javascript

解决方案


dataObjectselected数组中通过引用分配,因此它是您分配两次的同一个对象,更改一个将更改selected数组的两个元素,因为它们是同一个对象。

看看下面的代码是否有帮助

let data = [{"name": "Apple"} , {"name": "Orange"}, {"name": "Pineapple"}]
let selected = [];

const dataObject = {"name": "Apple"};

//assigning a new object to selected by using dataObject
selected.push({"name":dataObject.name});

//assigning a new object to selected by using dataObject
selected.push({"name":dataObject.name});

for(let i = 0; i<selected.length; i++) {
  selected[i]['position'] = i;
}

document.write('<br>' + JSON.stringify(selected));

这个问题的答案可以让你开始了解更多


推荐阅读