IE9: манипулировать строкой, если значение строки совпадает с массивом объектов.

avatar
user15541204
1 июля 2021 в 16:29
18
1
0

В приведенной ниже функции setChildNumber передаются такие строки, как «Child2» или «Child3», «Child4». Переменная «семейство» содержит массив объектов. Я добавил пример данных. Этот код должен поддерживать IE9. Поэтому я не могу использовать «найти».

Цель:

Мне нужна помощь в поиске индекса из семейного массива объектов, если family.type === child and id === memberID, замените memberID на индекс из семейства[]

function setChildNumber(member) {
        var family = JSON.parse(sessionStorage.getItem('memberObject'));
        var memberID = +member.match(/\d+/)[0];    
        if(!family) return;
        var index = member.toLowerCase().indexOf('child') === 0
          && family.find(function(elem) {
              return (elem.id === memberID);
            }).index;

        return member.slice(0, member.length-1) + ' ' + index;
      }

family = [
    {
        "id": 1,
        "type": "SELF",
        "birthday": "10/10/1980", 
        "age": 40
    },
    {
        "id": 2,
        "type": "CHILD",
        "index": 1,
        "birthday": "10/10/2001"

    },
    {
        "id": 3,
        "type": "SPOUSE",
        "birthday": "10101980",
        "age": 40
    },
    {
        "id": 4,
        "type": "CHILD",
        "index": 2,
        "birthday": "10102010",
        "age": 10
    }
]
Источник
Barmar
1 июля 2021 в 16:32
0

Вы можете заменить find() тривиальным циклом for.

Barmar
1 июля 2021 в 16:33
0

Здесь также есть полифилл: github.com/zloirock/core-js#ecmascript-array

Ответы (1)

avatar
Unmitigated
1 июля 2021 в 16:33
0

Вы можете использовать простой цикл for.

var idx = -1;
for(var i = 0; i < family.length; i++){
    if(family[i].type.toLowerCase() === 'child' && family[i].id === memberID){
          idx = i;
          break;
    }
}
Unmitigated
1 июля 2021 в 16:36
0

@ user15541204 Что ты имеешь в виду?

user15541204
1 июля 2021 в 16:39
0

семья[я].индекс = я; что это делает??

user15541204
1 июля 2021 в 16:40
0

Мне нужно, чтобы индекс хранился в переменной, поэтому я могу заменить число в переменной-члене этим индексом. member.slice(0, member.length-1) + ' ' + индекс

Unmitigated
1 июля 2021 в 16:41
0

@user15541204 user15541204 Я изменил код, чтобы сохранить индекс в переменной.