删除后减少 JSON 数组中的 ID
Posted
技术标签:
【中文标题】删除后减少 JSON 数组中的 ID【英文标题】:Decrement ID in JSON array after deletion 【发布时间】:2017-07-10 21:12:30 【问题描述】:我的本地存储中存储了一个数组。它是动态的。我将数据与一个 ID 一起存储,该 ID 在每次输入后都会递增。用户可以选择删除,因此,我应该从数组中删除相应的元素。但是,我希望 ID 保持升序。例如:
var jsonObj = ['id':'1','name':'Ray','email':'ray@gmail.com',
'id':'2','name':'Steve','email':'steve@gmail.com',
'id':'3','name':'Albert','email':'albert@gmail.com',
'id':'4','name':'Christopher','email':'chris@gmail.com']
我正在为上述数组创建 html div。万一史蒂夫删除了他的详细信息,我希望数组如下:
var jsonObj = ["id":1,"name":"Ray","email":"ray@gmail.com",
"id":2,"name":"Albert","email":'albert@gmail.com",
"id":3,"name":"Christopher","email":"chris@gmail.com"]
以下代码不能相应地工作。
for (var i=0; i<jsonObj.length; i++)
//delete function is working fine.
jsonObj[i].id--;
break;
【问题讨论】:
***.com/questions/8310270/… 【参考方案1】:您可以从给定的索引进行迭代并减少 id
属性。
function deleteItem(i)
array.splice(i, 1);
while (i < array.length)
array[i].id--;
i++;
var array = [ id: '1', name: 'Ray', email :'ray@gmail.com', id: '2', name: 'Steve', email: 'steve@gmail.com' , id: '3', name: 'Albert', email: 'albert@gmail.com' , id: '4', name: 'Christopher', email: 'chris@gmail.com' ];
deleteItem(1);
console.log(array);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
【参考方案2】:如果你从0开始,那么你甚至不需要ID
Ray 是第 0 个元素,Christopher 是第 3 个元素
删除 Albert 和 Christopher 是第二个
var jsObj = ['name':'Ray','email':'ray@gmail.com',
'name':'Steve','email':'steve@gmail.com',
'name':'Albert','email':'albert@gmail.com',
'name':'Christopher','email':'chris@gmail.com']
for (var i=0;i<jsObj.length;i++)
document.write("<br>ID"+(i+1)+": "+jsObj[i].name)
document.write("<hr/>");
jsObj.splice(2, 1); // Bye bye Albert
for (var i=0;i<jsObj.length;i++)
document.write("<br>ID"+(i+1)+": "+jsObj[i].name)
更多信息
Reindex javascript array / object after removing a key
【讨论】:
我做了完全相同的事情,但我确实为用户提供了一个编辑选项,用户可以在其中编辑任何详细信息。元素之间的唯一性丢失了,我被命令使用 ID。感谢您的回复先生。 您可以在循环中将 id 显示为 (i+1)【参考方案3】:您只需在 for 循环中声明一个新变量,然后将其递增,然后将此值分配为它们的 id
for (var i=0, id=1; i<jsonObj.length; i++, id++)
var jsonObj = ['id':'1','name':'Ray','email':'ray@gmail.com',
'id':'2','name':'Steve','email':'steve@gmail.com',
'id':'3','name':'Albert','email':'albert@gmail.com',
'id':'4','name':'Christopher','email':'chris@gmail.com'];
console.log(jsonObj);
jsonObj.splice(1, 1);
for (var i=0, id=1; i<jsonObj.length; i++, id++)
jsonObj[i].id = id;
console.log(jsonObj);
【讨论】:
【参考方案4】:一个非常简单的方法可能是:
// the index of the deleted element
const delIndex = 2;
// reindex all entries starting from deleted one
for (var i=delIndex+1; i<jsonObj.length; i++)
jsonObj[i].id = i + 1;
id 基本上与数组索引相对应。因此,与其尝试重新计算 id,我们可以用相应的索引覆盖它(+1,因为你从 1 开始,而不是像数组索引那样从 0 开始)。
【讨论】:
【参考方案5】:根据您的要求,您必须在 javascript 中使用 splice 方法
array.splice(index_you_wantto_delete,count)
ex:-jsonObj.splice(1,1);
splice() 方法在数组中添加/删除项目,
【讨论】:
问题是不要删除。这是另外一回事。无论如何感谢您的帮助:)【参考方案6】:这是一个详细的解决方案,逐步解释该过程
1- 删除元素
2 - 如果找到并删除了元素,则更新索引
/**
*
* @param array list Your list
* @param int elementID The id of the element you want to remove
* @returns list The list with the element removed and the indexes rearanged
*/
var deleteElement = function (list, elementID)
var removedIndex = false;
for (var index = 0; index < list.length; index++)
if (list[index]['id'] === elementID)
list.slice(index, 1);
removedIndex = index;
break;
if (removedIndex !== false)
//Get last id
var lastElement = (removedIndex === 0) ? null : list[removedIndex - 1];
// Set to 0 if the first element was removed
var lastID = (lastElement === null) ? 0 : lastElement.id;
for (var i = removedIndex; i < list.length; i++)
list[i].id = ++lastID;
return list;
;
【讨论】:
【参考方案7】:试试下面的方法。希望它有效!
// index of the deleted item
var itemDeleted = 2;
// create a for loop from deleted index till last
for (var i = itemDeleted-1; i < jsonObj.length; i++)
jsonObj[i].id = i+1;
【讨论】:
【参考方案8】:你可以在纯js中使用map来做
const jsonObj = [
'name': 'Ray',
'email': 'ray@gmail.com'
,
'name': 'Steve',
'email': 'steve@gmail.com'
,
'name': 'Albert',
'email': 'albert@gmail.com'
,
'name': 'Christopher',
'email': 'chris@gmail.com'
];
jsonObj.splice(1, 1);
const newObj = jsonObj.map((c, i) => (
name: c.name,
email: c.email,
id: i + 1
));
console.log(newObj);
【讨论】:
【参考方案9】:获取删除的索引并将其分配给for循环的i
值
for (var i=deletedIndex; i<jsonObj.length; i++)
jsonObj[i].id--;
【讨论】:
以上是关于删除后减少 JSON 数组中的 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Spring Boot 中的 JSON 数组中删除元素? [关闭]
从 pandas 转换为 numpy 后,如果数组包含 nan,则删除“nan”或减少 numpy 数组的长度 [重复]