#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 } ]