Я создаю приложение, в котором пользователь вводит данные от клиентов. Эти данные будут храниться в localStorage
. Пока здесь все работает нормально. Но мне нужно подсчитать length
объекта, а затем автоматически присвоить последовательный номер каждому клиенту по мере его создания и сохранения. Так как javascript
объекты нумеруются с 0, например, первый клиент будет 0 на array
, но в реальной жизни это номер 1. Итак, мне нужно выполнить итерацию и получить последний клиент, как его заказал js
, затем добавить 1, затем назначьте его clientn
для хранения данных этого клиента.
Json
Clients:"[{
"id":"qece2345-cd9d-4898-fd18-3ded710a8062",
"hasPic":false,
"picId":2,
"picSrc":"",
"picFile":[],
"createdOn":"2023-03-30T14:22:22.899Z",
"firstName":"JND PLUS MASTER",
"job":"Destroza avernos",
"clientn":""
}]"
Js
function setClientNumber() {
var clients = JSON.parse(localStorage.getItem("Clients")) || {};
for (var m = 0; m < clients.length; m++) {
clientNumber = clients.slice(-1)["0"].clientn;
clients.push(client, clientNumber + '1');
localStorage.setItem("Clients", JSON.stringify(clients));
}
Ожидаемый результат
Clients:"[{
"id":"qece2345-cd9d-4898-fd18-3ded710a8062",
"hasPic":false,
"picId":2,
"picSrc":"",
"picFile":[],
"createdOn":"2023-03-30T14:22:22.899Z",
"firstName":"JND PLUS MASTER",
"job":"Destroza avernos",
"clientn":"1"
},{
"id":"qece2345-cd9d-4898-fd18-3ded710a8062",
"hasPic":false,
"picId":2,
"picSrc":"",
"picFile":[],
"createdOn":"2023-03-30T14:22:22.899Z",
"firstName":"JND PLUS MASTER",
"job":"Destroza avernos",
"clientn":"2"
},{
"id":"qece2345-cd9d-4898-fd18-3ded710a8062",
"hasPic":false,
"picId":2,
"picSrc":"",
"picFile":[],
"createdOn":"2023-03-30T14:22:22.899Z",
"firstName":"JND PLUS MASTER",
"job":"Destroza avernos",
"clientn":"3"
}]"
Обратите внимание, что у первого клиента object 0
есть "clientn":1
; object 1
, есть "clientn":2
; object 2
, есть "clientn":3
.
Я не уверен, что ваш вопрос. Вроде бы «напишите мне этот код», но могу ошибаться.
Приведенный код Json является лишь примером.
push
вы по какой-то причине нажимаете два элементаПопробуйте что-нибудь попроще, например .map
function runSetClientNumber() {
const oldClients = JSON.parse(localStorage.getItem("Clients")) || {};
const newClients = oldClients.map(
(oldClient,zeroBasedIndex)=> ({
...oldClient,
clientn: 1+zeroBasedIndex
})
);
localStorage.setItem("Clients", JSON.stringify(newClients));
}
Я попробовал ваше решение, но оно не работает при сохранении новых данных клиента. console.info(oldClients);
и console.info(newClients);
показывают одних и тех же существующих клиентов с правильным значением clientn
. Разве console.info(newClients);
не должен показывать клиент, который тоже создается? В любом случае, мне нужно сохранить новые данные клиента с правильным значением clientn
. Я играю с этим, чтобы увидеть, смогу ли я сделать это правильно.
Ах, я предполагал, что setClientNumber
просто предназначен для установки номера клиента. Теперь я понимаю, что вы надеялись, что это также добавит клиента. Предположительно передается через параметр? Хотя ваша функция не имеет параметра. Я обновлю.
На самом деле старые клиенты получают правильный номер, а в новом clientn
пусто.
Странный. У меня возникают трудности с тем, что вы подразумеваете под пустым. undefined
? Пустое место? Не указано в свойствах объекта? нулевой? Я не могу придумать причину ни для одного из них. Я добавил некоторые явные файлы console.info. Можете ли вы попробовать еще раз и включить вывод в вопрос, чтобы мы могли увидеть, в чем проблема?
Пусто означает, что в localstorage
поле clientn
для нового клиента пусто. Вот так: {......."clientn":""}
. Теперь я понимаю, что мне нужно интегрировать ваше решение в function
, что на самом деле избавит клиента от localstorage
Я наткнулся на решение! Это был ваш предыдущий ответ, я только что вызвал функцию setClientNumber
из своей собственной функции сохранения нового клиента, сразу после сохранения нового клиента, а затем setClientNumber
отлично справляется со своей задачей. Я обновлю ответ для дальнейших ссылок.
Как вы определяете уникальность самих объектов, все эти объекты выглядят одинаково, так что же определяет, когда у вас есть другой клиент, к которому нужно добавить новое значение clientn? Или это не имеет значения, вы просто хотите получить каждый объект в массиве объектов и добавить ключ/значение
clientn
, где значение увеличивается с каждым новым объектом в массиве?