আমি ধরে নিলাম আপনি spliceএই জাতীয় কিছু ব্যবহার করেছেন?
for (var i = 0; i < arrayOfObjects.length; i++) {
var obj = arrayOfObjects[i];
if (listToDelete.indexOf(obj.id) !== -1) {
arrayOfObjects.splice(i, 1);
}
}
ত্রুটি ঠিক করতে আপনার যা করতে হবে তা হ'ল iপরবর্তী সময়ের জন্য হ্রাস , তারপরে (এবং পিছনের দিকে লুপ করাও একটি বিকল্প):
for (var i = 0; i < arrayOfObjects.length; i++) {
var obj = arrayOfObjects[i];
if (listToDelete.indexOf(obj.id) !== -1) {
arrayOfObjects.splice(i, 1);
i--;
}
}
রৈখিক-সময় মুছে ফেলা এড়াতে, আপনি অ্যারের উপরে রাখতে চান এমন অ্যারে উপাদানগুলি লিখতে পারেন :
var end = 0;
for (var i = 0; i < arrayOfObjects.length; i++) {
var obj = arrayOfObjects[i];
if (listToDelete.indexOf(obj.id) === -1) {
arrayOfObjects[end++] = obj;
}
}
arrayOfObjects.length = end;
এবং আধুনিক রানটাইমে লিনিয়ার-টাইম লুকআপগুলি এড়াতে আপনি একটি হ্যাশ সেট ব্যবহার করতে পারেন:
const setToDelete = new Set(listToDelete);
let end = 0;
for (let i = 0; i < arrayOfObjects.length; i++) {
const obj = arrayOfObjects[i];
if (setToDelete.has(obj.id)) {
arrayOfObjects[end++] = obj;
}
}
arrayOfObjects.length = end;
যা একটি সুন্দর ফাংশনে আবৃত হতে পারে:
const filterInPlace = (array, predicate) => {
let end = 0;
for (let i = 0; i < array.length; i++) {
const obj = array[i];
if (predicate(obj)) {
array[end++] = obj;
}
}
array.length = end;
};
const toDelete = new Set(['abc', 'efg']);
const arrayOfObjects = [{id: 'abc', name: 'oh'},
{id: 'efg', name: 'em'},
{id: 'hij', name: 'ge'}];
filterInPlace(arrayOfObjects, obj => !toDelete.has(obj.id));
console.log(arrayOfObjects);
আপনার যদি এটি জায়গায় না করার দরকার হয় তবে তা হ'ল Array#filter:
const toDelete = new Set(['abc', 'efg']);
const newArray = arrayOfObjects.filter(obj => !toDelete.has(obj.id));