У меня есть локальный файл JSON по пути static/json/test.json. Его содержимое - [{"id": 12}, {"id": 44}]. Я хочу прочитать его, удалить из него объект индекса i и переписать файл, чтобы, например, i = 0, новое содержимое было [{"id": 44}].
Что я пробовал до сих пор:
let i = 0;
fs.readFile("static/json/test.json", "utf8", function(err, data) {
let obj = JSON.parse(data); // obj is now [{"id": 12}, {"id": 44}]
delete obj[i];
fs.writeFile("static/json/test.json", JSON.stringify(obj), "utf8");
// test.json should now be [{"id": 44}], but its [null, {"id": 44}]
});
Если я это сделаю, содержимое test.json будет не [{"id": 44}], а [null, {"id": 44}].
Я читал об использовании obj.splice(i, 1); вместо delete obj[i];, но по какой-то причине он ничего не делает, и я не получаю никаких ошибок.
Как удалить объект индекса i из этого массива JSON, не оставляя null?
Редактировать:
Спасибо за быстрые ответы! Обычно obj.splice(i, 1); должен работать, причина, по которой он не работает для меня, связана с моей настройкой. Рабочий ответ для меня
let i = 0;
fs.readFile("static/json/test.json", "utf8", function(err, data) {
let obj = JSON.parse(data); // obj is now [{"id": 12}, {"id": 44}]
delete obj[i];
obj = obj.filter(item => item);
fs.writeFile("static/json/test.json", JSON.stringify(obj), "utf8");
// test.json is now [{"id": 44}]
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать delete и отфильтровать undefined
const obj= [{"id": 12}, {"id": 44}]
delete obj[0];
console.info(obj.filter(item => item));НОsplice() работает нормально
const obj= [{"id": 12}, {"id": 44}]
obj.splice(0, 1);
console.info(obj);Если вы фильтруете, зачем вообще удалять?
Да, я согласен, только фильтр поможет. Но в качестве OP использовал уже delete, поэтому я просто делаю фильтр undefined
Вы можете использовать Array.splice для этого
// The item index to remove
let index = 0;
let arr = [{id: 12}, {id: 44}];
arr.splice(index,1);
console.info("Array after removing item", arr);
Использование кода, который вы здесь показываете с
obj.splice(i, 1)вместоdelete obj[i], отлично работает и приводит кtest.jsonкак[{"id":44}]. В вашей настройке должна быть другая проблема, которую следует исправить, а не искать обходной путь. Какой вывод на консоль при записиobj.splice(i, 1); console.dir(JSON.stringify(obj));вместоdelete obj[i]