Javascript 格式化数据和删除键

Javascript 格式化数据和删除键,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我还有一个数据问题。数据处理是我的一个真正的弱点,所以试着更好地理解它。我有一个名为data的变量,它包含以下内容 [ {"ID":1,"process":"quick","owner":"John","decission":"Admin","status":"failed","flag":"red"}, {"ID":2,"process":"standard","owner":"Mary","decission":"Admin","status":"failed","flag"

我还有一个数据问题。数据处理是我的一个真正的弱点,所以试着更好地理解它。我有一个名为data的变量,它包含以下内容

[
    {"ID":1,"process":"quick","owner":"John","decission":"Admin","status":"failed","flag":"red"},
    {"ID":2,"process":"standard","owner":"Mary","decission":"Admin","status":"failed","flag":"blue"},
    {"ID":3,"process":"slow","owner":"John","decission":"Management","status":"active","flag":"red"}
]
它本质上是一个对象数组。我试图将其转换为一个数组,其中对象键是数组的第一行,内容如下。 但是,我不需要ID或标志。所以上面看起来像这样

[
    ["process","owner","decission","status"],
    ["quick","John","Admin","failed"],
    ["standard","Mary","Admin","failed"],
    ["slow","John","Management","active"]
]
const keys = Object.keys(this.data[0]);
keys.splice(keys.indexOf('ID'), 1);
keys.splice(keys.indexOf('flag'), 1);
this.formattedArray.push(keys);
因此,为了得到标题行,我正在考虑这样做

[
    ["process","owner","decission","status"],
    ["quick","John","Admin","failed"],
    ["standard","Mary","Admin","failed"],
    ["slow","John","Management","active"]
]
const keys = Object.keys(this.data[0]);
keys.splice(keys.indexOf('ID'), 1);
keys.splice(keys.indexOf('flag'), 1);
this.formattedArray.push(keys);
然而,对我来说,这似乎是一个非常循序渐进的过程,那么我如何确保其他数据被放置在下面正确的行中呢

将我的初始数据格式化为我现在需要的格式的最佳方式是什么


谢谢

首先获取关键点,然后获取基于这些关键点的值

const data=[{ID:1,进程:quick,所有者:John,决策:Admin,状态:failed,flag:red},{ID:2,进程:standard,所有者:Mary,决策:Admin,状态:failed,flag:blue},{ID:3,进程:slow,所有者:John,决策:Management,状态:active,flag:red}]; const keys=Object.keysdata[0]。filtere=>![ID,标志]。包括E; const values=data.mape=>Object.entriese.filter[k]=>keys.includesk.map[,v]=>v; 常量res=[键,…值]; console.logres;
.as控制台包装{max height:100%!important;top:auto;}首先获取键,然后获取基于这些键的值

const data=[{ID:1,进程:quick,所有者:John,决策:Admin,状态:failed,flag:red},{ID:2,进程:standard,所有者:Mary,决策:Admin,状态:failed,flag:blue},{ID:3,进程:slow,所有者:John,决策:Management,状态:active,flag:red}]; const keys=Object.keysdata[0]。filtere=>![ID,标志]。包括E; const values=data.mape=>Object.entriese.filter[k]=>keys.includesk.map[,v]=>v; 常量res=[键,…值]; console.logres;
.as console wrapper{max height:100%!important;top:auto;}由于我发现您没有包含所有标头的数组,因此可以使用以下方法创建它:

const headers = Object.keys(data[0]).filter(header => header !== 'ID');
完成所有标题后,您可以继续提取数据:

常数数据=[ {ID:1,进程:quick,所有者:John,决策:Admin,状态:failed,标志:red}, {ID:2,进程:标准,所有者:Mary,决策:Admin,状态:failed,标志:blue}, {ID:3,进程:慢,所有者:John,决策:管理,状态:活动,标志:红色} ]; const headers=Object.keysdata[0]。filterheader=>header!='ID'; const result=[headers]; data.forEachrow=>result.pushheaders.mapheader=>row[header];
console.logresult 由于我看到您没有包含所有标题的数组,您可以使用以下方法创建它:

const headers = Object.keys(data[0]).filter(header => header !== 'ID');
完成所有标题后,您可以继续提取数据:

常数数据=[ {ID:1,进程:quick,所有者:John,决策:Admin,状态:failed,标志:red}, {ID:2,进程:标准,所有者:Mary,决策:Admin,状态:failed,标志:blue}, {ID:3,进程:慢,所有者:John,决策:管理,状态:活动,标志:红色} ]; const headers=Object.keysdata[0]。filterheader=>header!='ID'; const result=[headers]; data.forEachrow=>result.pushheaders.mapheader=>row[header];
console.logresult 下面是使用Array.prototype.reduce执行此操作的另一种方法


下面是使用Array.prototype.reduce执行此操作的另一种方法


而其他的解决方案也起作用。我愿意

const excludeItems = new Set(["ID", "flag"]);

function generateTableData(data) {
  const headers = Object.keys(data[0]).filter(item => !excludeItems.has(item));
  const items = data.map(item =>
    Object.entries(item).reduce((res, [key, value]) => {
      if (!excludeItems.has(key)) {
        res.push(value);
      }
      return res;
    }, [])
  );
  return [headers, ...items];
}

而其他的解决方案也起作用。我愿意

const excludeItems = new Set(["ID", "flag"]);

function generateTableData(data) {
  const headers = Object.keys(data[0]).filter(item => !excludeItems.has(item));
  const items = data.map(item =>
    Object.entries(item).reduce((res, [key, value]) => {
      if (!excludeItems.has(key)) {
        res.push(value);
      }
      return res;
    }, [])
  );
  return [headers, ...items];
}

这是谷歌图表,所以我认为他们需要一个数组这是谷歌图表,所以我认为他们需要一个数组