javascript - 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}]
我的错误可能在哪里?
解决方案
dataObject
在selected
数组中通过引用分配,因此它是您分配两次的同一个对象,更改一个将更改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));
这个问题的答案可以让你开始了解更多
推荐阅读
- java - 如何将属性源分配给 micronaut 中的某个环境?
- javascript - 单击保存按钮后如何提交表单?
- r - 我是否正确使用 xgboost()(在 R 中)?
- node.js - NodeJS / Express res.download不发送文件
- reactjs - 当它应该只更新一个 onChange 时,通过一组对象映射将更新我的所有 react-switch 组件
- c - 这个程序背后的逻辑是什么?
- scala - 识别文件夹是否存在于 ADLS gen 2 帐户上的正确方法是什么
- wallet - PassKit 错误信息:无效数据错误读取 pass pass.com.*****
- bash - Fedora 容器没有可用的“查找”命令
- flutter - 如何知道 Flutter 将加载哪个 Asset 大小?