выполните цикл и верните номер для идентификатора

#javascript #loops

Вопрос:

Мне нужно создать несколько объектов, и у каждого из них должен быть идентификатор.
все они будут находиться внутри массива.
Так что это будет выглядеть так:

 const array = [
{
  id: 1,
  bla: "bla"
},
{
  id: 2,
  bla: "bla"
},
{
  id: 3,
  bla: "bla"
}
]
 

мой вопрос в том, есть ли способ создать функцию, которая будет возвращать число, которое я могу поместить в эти идентификаторы?

Комментарии:

1. getNextId(arr) =>arr.length 1

2. @tymeJV привет, чувак, спасибо, но извини, я действительно не понимаю и не могу найти много информации в Интернете о getnextid. не могли бы вы быть более конкретными?

3. Каким вы хотите, чтобы был номер? index 1 как вы это показываете?

Ответ №1:

Вероятно, вам нужно то, что мы называем генераторами/итераторами.

Генератор/итератор-это функция, которая имеет внутреннее состояние.

В js он создается путем добавления «*» рядом с «функцией» и использования ключевого слова «yield» вместо «return» (см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield).

При вызове генератора он сохраняет заданные аргументы и возвращает итератор, для которого вы можете вызвать .next (), чтобы получить следующее значение (обратите внимание, что возвращается объект с атрибутом «значение»).

 function* idGenerator (startingIndex) {
    while (true){
        //the iterator will keep his inner state
        startingIndex  = 1;
        yield startingIndex;
    }
}
 

Ответ №2:

 function makeArrayWithId(...objects) {
    return objects.map((o, i) => ({ id: i   1, ...o }))
}


const arr = makeArrayWithId(
    {
        bla: "bla"
    },
    {
        bla: "bla"
    },
    {
        bla: "bla"
    },
)

console.log(arr)
 

это будет печататься:

 [ { id: 1, bla: 'bla' }, { id: 2, bla: 'bla' }, { id: 3, bla: 'bla' } ]
 

если у вас уже есть массив, в котором каждый объект не имеет идентификатора, вы можете передать его этой функции следующим образом:

 let myArr = [
    {
        bla: 'bla'
    },
    {
        bla: 'bla'
    },
    {
        bla: 'bla'
    },
]
myArrr = makeArrayWithId(...myArr)
console.log(myArr)
 

это будет печататься:

 [ { id: 1, bla: 'bla' }, { id: 2, bla: 'bla' }, { id: 3, bla: 'bla' } ]
 

Комментарии:

1. выглядит почти идеально, но он возвращает [ {бла: «бла»}, {бла: «бла»} {бла: «бла»}, {бла: «бла»} идентификатор: 1 ] спасибо за ваш ответ! может быть, это опечатка?

2. @bigLezo извини, но ты прав. Я отредактировал свой ответ. Я забыл поставить … перед параметром функции при ее вызове. пожалуйста, повторите попытку, основываясь на моем отредактированном ответе.

Ответ №3:

 let array = [
{
  bla: "bla"
},
{
  bla: "bla"
},
{
  bla: "bla"
}
]


array = array.map((item, index) => Object.assign({}, item, { id: index   1 }))
 

Выход:

 [ { bla: 'bla', id: 1 },
  { bla: 'bla', id: 2 },
  { bla: 'bla', id: 3 } ]