Как добавить новое свойство (индекс) для каждого объекта в массиве с отображением нокаута (ko.utils)?

Есть ли какая-либо утилита для добавления индекса каждого объекта в массиве в качестве свойства в нокауте JS? Я делаю это в два этапа, я хочу добавить свойство индекса для каждого объекта в то же время, которое передается в массив. Вот мой код

ko.utils.arrayPushAll(array,
        ko.mapping.fromJS(result)());

for (var i = 0; i < array.length; i++) {
   array[i].index = i;
}

1 ответ

С риском не ответить на ваш вопрос:

Если вы перебираете массив в привязке foreach:, у вас будет доступный наблюдаемый индекс $, чтобы вы могли ссылаться на индекс в массиве.

Если вы сделали свой массив observableArray, вы можете прикрепить computedObservable к вашей модели, которая выполняет что-то вроде:

myArray()[i].index = ko.pureComputed(()=>myArray().indexOf(myArray()[i]))

Я считаю, что индекс будет наблюдаемой, которая будет уведомлять подписчиков при изменении массива (и, следовательно, индекс должен быть пересчитан).

Другие вопросы по тегам