Yo'q qilishdan keyin JSON arrayidagi ID qiymatini kamaytirish

Mahalliy xotiramda saqlangan qator bor. Bu dinamik. Men har bir kiritilgandan keyin ma'lumotlarni ko'paytiradigan ID bilan birga saqlayman. Foydalanuvchi yo'q qilish imkoniyati mavjud, shuning uchun men mos keladigan elementni qatordan olib tashlashim kerak. Lekin, men ID ning ortib borayotgan tartibda bo'lishini xohlayman. Misol:

var jsonObj = [{'id':'1','name':'Ray','email':'[email protected]'},  
               {'id':'2','name':'Steve','email':'[email protected]gmail.com'},
               {'id':'3','name':'Albert','email':'[email protected]'},
               {'id':'4','name':'Christopher','email':'[email protected]'}]

Yuqoridagi qator uchun HTML div'llarini yaratmoqdamiz. Agar Stiv o'zining ma'lumotlarini o'chirsa, men qatorni bo'lishini xohlayman:

var jsonObj = [{"id":1,"name":"Ray","email":"[email protected]"},  
               {"id":2,"name":"Albert","email":'[email protected]"},
               {"id":3,"name":"Christopher","email":"[email protected]"}]

Quyidagi kod to'g'ri ishlamaydi.

for (var i=0; i
2
Kalitni olib tashlaganingizdan so'ng JavaScript array obyekti"> stackoverflow.com/ savollar/8310270/& hellip;
qo'shib qo'ydi muallif mplungjan, manba

9 javoblar

Faqatgina berilgan indeksdan yineleyak va id xususiyatini kamaytirishingiz mumkin.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function deleteItem(i) {
    array.splice(i, 1);
    while (i < array.length) {
        array[i].id--;
        i++;
    }
}

var array = [{ id: '1', name: 'Ray', email :'[email protected]'}, { id: '2', name: 'Steve', email: '[email protected]' }, { id: '3', name: 'Albert', email: '[email protected]' }, { id: '4', name: 'Christopher', email: '[email protected]' }];

deleteItem(1);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
</div> </div>
3
qo'shib qo'ydi

Agar siz 0 dan boshlasangiz, unda sizning identifikatoringiz kerak emas

Ray 0-element, Kristofer 3-chi

Albertni va Kristoferni yo'q qilish 2-o'rin

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var jsObj = [{'name':'Ray','email':'[email protected]'},  
             {'name':'Steve','email':'[email protected]'},
             {'name':'Albert','email':'[email protected]'},
             {'name':'Christopher','email':'[email protected]'}]
for (var i=0;i
ID"+(i+1)+": "+jsObj[i].name) } document.write("

");
jsObj.splice(2, 1);//Bye bye Albert
for (var i=0;i
ID"+(i+1)+": "+jsObj[i].name) }
</div> </div>

Qo'shimcha ma'lumot

Kalitni olib tashlaganingizdan keyin Reindex JavaScript array/object

2
qo'shib qo'ydi
id ni (i + 1) loop sifatida ko'rsatishingiz mumkin
qo'shib qo'ydi muallif mplungjan, manba
Men aynan shunday narsani qildim, lekin foydalanuvchining tafsilotlarini tahrirlashi mumkin bo'lgan tahrirlash imkoniyati mavjud. Elementlar orasida noyoblik yo'qoldi va menga ID ishlatishga buyurtma berildi. Sizning javobingiz uchun rahmat.
qo'shib qo'ydi muallif Venky, manba
Men bunga amal qilaman
qo'shib qo'ydi muallif Venky, manba

Siz faqat sizning loopingizda yangi o'zgaruvchini e'lon qilasiz va uni ushbu qiymatni oshirasiz va siz bu qiymatni identifikator sifatida belgilashingiz mumkin

for (var i=0, id=1; i

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var jsonObj = [{'id':'1','name':'Ray','email':'[email protected]'},  
               {'id':'2','name':'Steve','email':'[email protected]'},
               {'id':'3','name':'Albert','email':'[email protected]'},
               {'id':'4','name':'Christopher','email':'[email protected]'}];


console.log(jsonObj);

jsonObj.splice(1, 1);


for (var i=0, id=1; i
</div> </div>
1
qo'shib qo'ydi

juda sodda yondashuv bo'lishi mumkin:

// the index of the deleted element
const delIndex = 2;

// reindex all entries starting from deleted one
for (var i=delIndex+1; i

Id odatda qator qatoriga to'g'ri keladi. Demak, idni yangitdan hisoblashni o'rniga, uni faqatgina indeks bilan yozib qo'yishimiz mumkin (+1 bo'lsa, qator qator indekslar kabi nolga teng emas).

1
qo'shib qo'ydi

Bu jarayonni bosqichma-bosqich tushuntirib beradigan aniq echim

1- Elementni o'chiring

2 - Agar element topilgan va o'chirilgan bo'lsa, indekslarni yangilang

/**
 * 
 * @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;
};
1
qo'shib qo'ydi

Siz xaritani foydalanib, sof jsda qilishingiz mumkin

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

const jsonObj = [{
    'name': 'Ray',
    'email': '[email protected]'
  },
  {
    'name': 'Steve',
    'email': '[email protected]'
  },
  {
    'name': 'Albert',
    'email': '[email protected]'
  },
  {
    'name': 'Christopher',
    'email': '[email protected]'
  }
];

jsonObj.splice(1, 1);

const newObj = jsonObj.map((c, i) => ({
  name: c.name,
  email: c.email,
  id: i + 1
}));

console.log(newObj);
</div> </div>
1
qo'shib qo'ydi

Sizning talablaringiz uchun javascriptda splice usulidan foydalaning

array.splice(index_you_wantto_delete,count)

ex:-jsonObj.splice(1,1);

Splice() usuli ma'lumotlar qatoriga qo'shimchalar/olib tashlaydi,

1
qo'shib qo'ydi
Muammo yo'q emas. Bu boshqa narsa. Baribir yordamingiz uchun rahmat :)
qo'shib qo'ydi muallif Venky, manba

O'chirilgan indeksni oling va uni loop uchun i ga tayinlang

for (var i=deletedIndex; i
0
qo'shib qo'ydi

Quyidagi usulni sinab ko'ring. Umid qilamanki !!

// 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;
}
0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb