Как установить несколько значений для одного и того же ключа без перезаписи предыдущего значения? - PullRequest
0 голосов
/ 15 марта 2020

По сути, я хочу иметь возможность добавлять несколько значений для одного ключа, помещая указанные значения в массив и устанавливая его для моего основного объекта для доступа позже. Как я могу лучше всего go сделать это? Это было так неприятно, и я чувствую себя обескураженным и спрашиваю себя, почему я когда-либо думал, что смогу сделать это.

let mainObj = {}


const func = (str, obj) => {
  mainObj[str] = [obj]
}

func('str1', {content: 'content1' } )
func('str2', {content: 'content2' } )
func('str2', {content: 'content3' } )

console.log(mainObj)

//instead of this:
{ str1: [ { content: 'content1' } ],
  str2: [ { content: 'content3' } ] }


//I want this:
{ 
  str1: [ { content: 'content1' } ],
  str2: [ {content: 'content2' }, { content: 'content3' } ]
}

Ответы [ 3 ]

2 голосов
/ 15 марта 2020

Просто создайте массив из него так:

const func = (str, obj) => {
  mainObj[str] = (mainObj[str] || []).concat([obj])
}
0 голосов
/ 15 марта 2020

Вы должны положить sh на элемент, а не перезаписать его.

let mainObj = {}

const func = (str, obj) => {
  if (!mainObj[str]) {
    mainObj[str] = [];
  }
  mainObj[str].push(obj);
}

func('str1', {
  content: 'content1'
})
func('str2', {
  content: 'content2'
})
func('str2', {
  content: 'content3'
})

console.log(mainObj)
0 голосов
/ 15 марта 2020

Сначала вы должны проверить, существует ли уже массив с этим строковым ключом;

, если да, то вы помещаете sh его в этот массив вместо его замены на новый,

если нет, то делай то, что делал, создавая массив с этим ключом

let mainObj = {}


const func = (str, obj) => {
  if (mainObj[str]){
    mainObj[str].push(obj)
  }else{
    mainObj[str] = [obj]
  }
}

func('str1', {content: 'content1' } )
func('str2', {content: 'content2' } )
func('str2', {content: 'content3' } )

console.log(mainObj)

//instead of this:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...