Я учусь использовать подчеркивание JS. Я сгруппировал массив. Но теперь мне нужно разделить массив.

У меня есть сгруппированный массив JSON. Например;

var arr = [{"key": "A", "value": ["erdem", "metin", "tamer", "hüseyin"]}]

Я хочу, чтобы это было результатом.

var arr = [{"key" : "A", "value" : "erdem"},{"key" : "A", "value" : "metin"},{"key" : "A", "value" : "tamer"},{"key" : "A", "value" : "hüseyin"}]

Я счастлив, если ты покажешь мне, как это сделать.

2
Erdem Aydemir 29 Авг 2017 в 11:56

3 ответа

Лучший ответ

@forguta, вы можете использовать этот метод, чтобы получить нужный вывод.

var arr = [{"key": "A", "value": ["erdem", "metin", "tamer", "hüseyin"]}]
_.map(arr,function(item){ 
     var temp=[];      
     _.map(item.value, function(x){         
      temp.push({key: item.key, value: x});      
    }); 
  return temp;  
});

Вы можете достичь результата и без временной переменной (краткая форма)

   _.map(arr,function(item){ 
      return _.map(item.value, function(x){
         return {key: item.key, value: x};
        });
    });
0
Manoj Pilania 29 Авг 2017 в 09:07

Vanilla JS, без подчеркивания / lodash :

var arr = [
  {"key": "A", "value": ["erdem", "metin", "tamer", "hüseyin"]},
  {"key": "B", "value": ["foo", "bar"]}
];

// create modified array of objects
var result = arr.map(item => item.value.map(v => ({ key:item.key, value:v })) );

// print result
console.log( [].concat(...result) );
2
vsync 29 Авг 2017 в 09:42

Как насчет reduce основного массива, а затем concat каждого результирующего массива с начальным пустым массивом

arr.reduce((i, o)=>i.concat(o.value.map(v=>({key: o.key, value: v}))), []);

var arr = [
  {"key": "A", "value": ["erdem", "metin", "tamer", "hüseyin"]},
  {"key": "B", "value": ["foo", "bar"]}
];

var res = arr.reduce((i, o)=>i.concat(o.value.map(v=>({key: o.key, value: v}))), []);

console.log(res);
0
Koushik Chatterjee 29 Авг 2017 в 12:26