遍历对象键和对象数组的值

时间:2019-03-09 21:20:31

标签: javascript arrays javascript-objects

我有一个键和值的对象(对象数组)

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

从上面...我需要为对象中的每个键获取一个对象数组。因此,我需要获取位置0的desc属性并分配给下面的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'

               }
               )
         }
})

我如何获得类似“数据”数组的结构?

3 个答案:

答案 0 :(得分:1)

无需使用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);

答案 1 :(得分:0)

正如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)

答案 2 :(得分: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 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);

相关问题