Я работаю над проектом, использующим jQuery и KendoUI для jQuery, и мне нужно создать метод для удаления элементов, обновив его, а не изменяя объект.
Я пришел к выводу, что должен использовать синтаксис распространения для идентификации и удаления объекта / параметра, который я получаю в качестве аргумента, а затем установить новый список в качестве оставшихся объектов / параметров.
Я хочу сделать что-то похожее на это, но я немного не уверен, как именно я могу идентифицировать объект, который я хочу удалить, без выполнения цикла - и мне нужен совет о том, как сделать эту «лучшую практику».
deleteOption: option => {
const { option, ...rest } = P.Order.Payment.get("paymentMethods");
P.Order.Payment.set("paymentMethods", rest);
}
Мой массив состоит из объектов, которые однозначно идентифицируются атрибутом uid
.
Объект в массиве создается так:
addNewCard: () => {
P.Order.Payment.addOption(
{
paymentName: "Kort",
type: "CC",
value: 0,
class: "form-control",
icon: "fal fa-credit-card",
validated: true,
uid: this.uid,
update: (values) => {
P.Order.Payment.updateOption(this, values);
},
rmItem: function(){
P.Order.Payment.subtractValue(this.uid);
P.Order.Payment.deleteOption(this);
}
}
);
},
РЕШЕНИЕ:
Предложения, приведенные ниже, ПОЛУЧИЛИ меня там, где мне было нужно, но в качестве аргумента, который я получаю, это объект, а не строка, мне нужен строковый идентификатор, чтобы использовать их. Поскольку объект в моем случае всегда является частью индексированного массива, хотя я мог использовать индекс в качестве своего идентификатора, мне также пришлось настроить метод set, чтобы правильно объединить оставшийся индексированный массив, не затрагивая ассоциативную часть массива, содержащую функции Kendo.
deleteOption: option => {
const index = P.Order.Payment.get("paymentMethods").indexOf(option);
let { [index]: _, ...rest } = P.Order.Payment.get("paymentMethods");
rest = Array.from(rest).filter(entry => entry === undefined || null);
P.Order.Payment.set("paymentMethods", [ ...rest ]);
},
Это решение решило мою проблему, я думаю, что оно достаточно чистое, но в нем должно быть место для оптимизации при использовании вне KendoUI.