使用单个键将javascript对象数组更改为包含对象的数组'数据

时间:2017-02-21 22:07:43

标签: javascript arrays object data-structures

我目前拥有以下格式的数据:

var anArray = [
  obj1: {
    key1: data1
  },
  obj2: {
    key2: data2
  },
];

我希望数据采用以下格式:

var array2 = [data1, data2];

出于某种原因,我无法想出一个简洁的方法来解决这个问题。我知道可以使用forEach循环来迭代每个对象并将其推送到一个新数组,但我希望更优雅(如果可能的话,更短)。

3 个答案:

答案 0 :(得分:1)

const anArray = {
  obj1: {
    key1: "A"
  },
  obj2: {
    key2: "B"
  },
};

const result = Object.keys(anArray).map(key => {
  const obj = anArray[key];
  return Object.keys(obj).map(key => obj[key])[0];
});

console.log(result);

答案 1 :(得分:0)

尝试:

const arr1 = [
	{key1:'value1'},
        {key2:'value2'}  
]

const res = arr1.map(obj => {
	          return Object.keys(obj).map(val => obj[val])
           }).reduce((acc,v) => {	
	          return acc.concat(v);
           },[]);

console.log(res);

<强>更新
但如果您有以下表格:

var anArray = [
  obj1: {
    key1: data1
  },
  obj2: {
    key2: data2
  },
];

最好应用递归函数,如下所示:

const arr1 = [
	{
  	obj1:{key1:'value1',key3:'value3'}
  },
	{
  	obj2:{key2:'value2'}
  }
]

const getValuesFromObj = (obj) => {
	if(typeof obj === 'string')
  	return obj;
    
	return Object.keys(obj).map(key => {
  	    return getValuesFromObj(obj[key]);
        }).reduce((acc,v) => {
  	return acc.concat(v); 		
  },[]);
}



const r2 = getValuesFromObj(arr1);
console.log(r2);

答案 2 :(得分:0)

鉴于anArray实际上已经正确构造为有效,那么您可以执行以下操作: 请注意,在这种情况下,anArray不是实际数组,而是对象文字

var anArray = {
    obj1: {
        key1: "data1"
    },
    obj2: {
        key2: "data2"
    },
};

var array2 = []
for(i in anArray){
    for(j in anArray[i]){
        array2.push(anArray[i][j])
    }
}
console.log(array2)

https://jsfiddle.net/wh4r0w5s/