Как сделать значения в качестве ключей и нажать его? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть JSON как

 0:{columnName:"gender",seedValues:["M","F"]}
 1:{columnName:"entity_type",seedValues:["O","I"]}

Я хочу JSON как

{
  "gender":["M","F"],
  "entity_type":["O","I"]
 }

Я пробовал

let value = this.values;
for(let i in value) {
    if(value[i].columnName=='gender')
    {
        this.gender.push(value[i].seedValues);
    }
    if(value[i].columnName=='entity_type')
    {
        this.entity.push(value[i].seedValues);
    }
    let obj = {
        "gender":this.gender,
        "entity_type":this.entity
    }
}

В Angular 6 или JavaScript, но я хочумоя структура JSON, как это

{
  "gender":["M","F"],
  "entity_type":["O","I"]
}

1 Ответ

0 голосов
/ 24 июня 2019

Во-первых, это не JSON, это чистый JS.Во-вторых, вы можете использовать reduce:

const arr = [{columnName:"gender",seedValues:["M","F"]},{columnName:"entity_type",seedValues:["O","I"]}];
const res = arr.reduce((a, { columnName, seedValues }) => (a[columnName] = seedValues, a), {});
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

Или вы можете сделать каждый элемент в массиве своим собственным объектом на основе ключа / значения, а затем reduce вместе взятых:

const arr = [{columnName:"gender",seedValues:["M","F"]},{columnName:"entity_type",seedValues:["O","I"]}];
const res = arr.map(({ columnName, seedValues }) => ({ [columnName]: seedValues })).reduce((a, c) => ({ ...a, ...c }));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
...