将对象转换为数组并省略键

时间:2016-08-15 06:30:47

标签: javascript arrays object

我有数据

{
  YHOO: [
    {
      date: Fri Apr 12 1996 00:00:00 GMT-0400 (EDT),
      open: 25.25,
      high: 43,
      low: 24.5,
      close: 33,
      volume: 408720000,
      adjClose: 1.38,
      symbol: 'YHOO'
    },
    ...
    {
      date: Thu Nov 14 2013 00:00:00 GMT-0500 (EST),
      open: 35.07,
      high: 35.89,
      low: 34.76,
      close: 35.69,
      volume: 21368600,
      adjClose: 35.69,
      symbol: 'YHOO'
    }
  ],
  GOOGL: [
    {
      date: Thu Aug 19 2004 00:00:00 GMT-0400 (EDT),
      open: 100,
      high: 104.06,
      low: 95.96,
      close: 100.34,
      volume: 22351900,
      adjClose: 100.34,
      symbol: 'GOOGL'
    },
    ...
    {
      date: Thu Nov 14 2013 00:00:00 GMT-0500 (EST),
      open: 1033.92,
      high: 1039.75,
      low: 1030.35,
      close: 1035.23,
      volume: 1166700,
      adjClose: 1035.23,
      symbol: 'GOOGL'
    }
  ],
  ...
}

如何跳过键,因此对象变为像这样的对象数组

[
    {
      date: Fri Apr 12 1996 00:00:00 GMT-0400 (EDT),
      open: 25.25,
      high: 43,
      low: 24.5,
      close: 33,
      volume: 408720000,
      adjClose: 1.38,
      symbol: 'YHOO'
    },
    {
      date: Thu Nov 14 2013 00:00:00 GMT-0500 (EST),
      open: 35.07,
      high: 35.89,
      low: 34.76,
      close: 35.69,
      volume: 21368600,
      adjClose: 35.69,
      symbol: 'YHOO'
    },
    {
      date: Thu Aug 19 2004 00:00:00 GMT-0400 (EDT),
      open: 100,
      high: 104.06,
      low: 95.96,
      close: 100.34,
      volume: 22351900,
      adjClose: 100.34,
      symbol: 'GOOGL'
    },
    {
      date: Thu Nov 14 2013 00:00:00 GMT-0500 (EST),
      open: 1033.92,
      high: 1039.75,
      low: 1030.35,
      close: 1035.23,
      volume: 1166700,
      adjClose: 1035.23,
      symbol: 'GOOGL'
    }
]

3 个答案:

答案 0 :(得分:1)

你可以这样做



var arr = {
  YHOO: [
    {
      date: 'Fri Apr 12 1996 00:00:00 GMT-0400 (EDT)',
      open: 25.25,
      high: 43,
      low: 24.5,
      close: 33,
      volume: 408720000,
      adjClose: 1.38,
      symbol: 'YHOO'
    },
    {
      date: 'Thu Nov 14 2013 00:00:00 GMT-0500 (EST)',
      open: 35.07,
      high: 35.89,
      low: 34.76,
      close: 35.69,
      volume: 21368600,
      adjClose: 35.69,
      symbol: 'YHOO'
    }
  ],
  GOOGL: [
    {
      date: 'Thu Aug 19 2004 00:00:00 GMT-0400 (EDT)',
      open: 100,
      high: 104.06,
      low: 95.96,
      close: 100.34,
      volume: 22351900,
      adjClose: 100.34,
      symbol: 'GOOGL'
    },
    {
      date: 'Thu Nov 14 2013 00:00:00 GMT-0500 (EST)',
      open: 1033.92,
      high: 1039.75,
      low: 1030.35,
      close: 1035.23,
      volume: 1166700,
      adjClose: 1035.23,
      symbol: 'GOOGL'
    }
  ],
};

var newArr = [];

for(var item in arr){
  if(arr.hasOwnProperty(item)){        
    arr[item].forEach(x => newArr.push(x));        
  }
}

console.log(newArr);




4castle&#39> 评论中你也可以做

for(var item in arr){
  if(arr.hasOwnProperty(item)){        
    newArr = newArr.concat(arr[item]);       
 }
}

答案 1 :(得分:0)

这可以通过迭代数据数组的每个属性来实现,例如。

var data2 = [];
Object.keys(data).forEach(key => data2 = data2.concat(data[key]));
console.log(data2);

这将产生一个单数值的数组。

答案 2 :(得分:0)

首先,您的代码中存在错误。您在每个对象中都有data属性,但它的值是非法的,您可以将它们修改为字符串。



{
      //data should be string type like this
      //otherwise the browser will throw an error
      date: 'Fri Apr 12 1996 00:00:00 GMT-0400 (EDT)',
      open: 25.25,
      high: 43,
      low: 24.5,
      close: 33,
      volume: 408720000,
      adjClose: 1.38,
      symbol: 'YHOO'
}
···




我认为你可以使用for-in循环来完成它。



//data variable is reference to your data.
var newData = [];
for ( var key in data ) {
	for ( var innerKey in data[key] )
		newData.push( data[key][innerKey] );
}




或者使用正则表达式来解决这个问题。



var finalData = [];

var dataArr = JSON.stringify( data ).match( /\[[^\]]*\]/g );

dataArr.forEach( function( item ) {
	var arr = JSON.parse( item );
	for( var i = 0, len = arr.length; i < len; i++ )
		finalData.push( arr[i] );
});
&#13;
&#13;
&#13;

相关问题