Перебирайте ключи объекта и значения, которые являются массивом объектов - PullRequest
0 голосов
/ 10 марта 2019

У меня есть объект ключа и значений (массив объектов)

 Obj:{ 
    key1: [{desc:'aaa', pos:0}, {desc:'bbb', pos:1}],
    key2: [{desc:'ccc', pos:0}, {desc:'ggg', pos:1}],
    key3: [{desc:'ddd', pos:0}, {desc:'jjj', pos:1}],
    key4: [{desc:'eee', pos:0}, {desc:'kkk', pos:1}]
  }

Исходя из вышесказанного ... Мне нужно получить массив объектов для каждого ключа в объекте. Итак, мне нужно получить свойство desc позиции 0 и присвоить text1 ниже. Текст 2 и текст 3 будут жестко закодированы.

data = [
  {
    text1: 'aaa',
    text2: 'name2',
    text3: '29/112/2017',
  },
  {
    text1: 'ccc',
    text2: 'name2',
    text3: '29/12/2017',
  },
 {
    text1: 'ddd',
    text2: 'name2',
    text3: '29/12/2017',
  },
 {
    text1: 'eee',
    text2: 'name2',
    text3: '29/12/2017',
  },

]

Пробовал следующее, но не работает ...

 var values = Object.values(obj); - would give me an array of array of objects

 values.map((item, index) => {
    item.map((i, x) => {

    if(i.pos == 0)
        {
           return(
               { 
                  text1: i.desc,
                  text2: 'name2'
                  text3: '29/12/2017'

               }
               )
         }
})

Как бы получить структуру, подобную массиву "data"?

Ответы [ 3 ]

1 голос
/ 10 марта 2019

Нет необходимости использовать item.map.Все, что вас волнует, это item[0], так что просто индексируйте его напрямую.

var obj = { 
    key1: [{desc:'aaa', pos:0}, {desc:'bbb', pos:1}],
    key2: [{desc:'ccc', pos:0}, {desc:'ggg', pos:1}],
    key3: [{desc:'ddd', pos:0}, {desc:'jjj', pos:1}],
    key4: [{desc:'eee', pos:0}, {desc:'kkk', pos:1}]
  };
  
var values = Object.values(obj);

var result = values.map(item => ({
  text1: item[0].desc,
  text2: 'name2',
  text3: '29/12/2017'
}));

console.log(result);
0 голосов
/ 10 марта 2019

var obj = { 
    key1: [{desc:'aaa', pos:0}, {desc:'bbb', pos:1}],
    key2: [{desc:'ccc', pos:0}, {desc:'ggg', pos:1}],
    key3: [{desc:'ddd', pos:0}, {desc:'jjj', pos:1}],
    key4: [{desc:'eee', pos:0}, {desc:'kkk', pos:1}]
  };
 
 var data = [];
  
  Object.keys(obj).forEach(function(key, value){
	var dict = {};
	dict.text1 = obj[key][0].desc;
	dict.text2 = 'name2';
	dict.text3 = '29/112/2017'
	data.push(dict);
});
console.log(data);
0 голосов
/ 10 марта 2019

Как отмечает Barmar, нет необходимости иметь отдельный массив, потому что map возвращает массив. Я исправил ваш код, чтобы вы могли понять, как вы можете динамически помещать данные в массив:

data = []
var values = Object.values(Obj)
values.map ((item , index)=>{
    item.map((i , x)=>{
        if(i.pos == 0){
            data.push({ 
                  "text1": i.desc,
                  "text2": 'name2',
                  "text3": '29/12/2017'

             })
        }
    })
})
console.log(data)
...