将键和值映射到 Javascript 中的新键

Mapping key and value to new keys in Javascript

字典数组应转换为更简单的形式。

 data = [{A:1},{B:2},{C:3}] 
 data = {A: 1, B: 2}
 data = ["0":{ A : 1, B : 2 , C : 3}]

两者是完全不同的数据集。我正在尝试将其映射为以下格式。 上面应该变成

 data = [
  {
    name: "A",
    y: 1
  },
  {
    name: "B",
    y: 2
  },
  {
    name: "C",
    y: 3
  }
];

我尝试了下面的方法,但它是错误的

name = {}
data.forEach(function(k,x){
    return name['name'] = k , name["y"] = x 
})

请建议我一个更好的方法。

map 每个对象的 entries 提取键和值,并且 return 具有 namey 键的对象:

const data = [{A:1},{B:2},{C:3}]
const output = data.map(item => {
  const [name, y] = Object.entries(item)[0];
  return { name, y };
});
console.log(output);

您可以检查数据格式,如果它不是数组,则构建一个并通过获取对象来减少数组,并为每个 key/value 结果集创建一个新对象。

function simple(data) {
    return (Array.isArray(data) ? data : [data]).reduce((r, o) => [...r, ...Object.entries(o).map(([name, y]) => ({ name, y }))], []);
}

console.log(simple([{ A: 1 }, { B: 2 }, { C: 3, D: 4 }]));
console.log(simple({ A: 1, B: 2 }));
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果保证键(A、B等)在整个数组中是唯一的,那么一切都会变得简单。

const data = [{A:1},{B:2},{C:3}];
const merged = Object.assign({}, ...data);
const newData = Object.entries(merged)
  .map(([name, y]) => ({ name, y }));
console.log(newData);

但是,如果密钥不能保证唯一,请参考 CertainPerformance 的回答。

我会说,使用得到广泛支持的 Object.keys()

let data = [{A:1},{B:2},{C:3}];

data = Object.assign({}, ...data);

data = Object.keys(data).map(key => ({ name: key, y: data[key] }));

console.log(data);

you can implement like this

 var data = [{A:1},{B:2},{C:3}];
 
 var reformattedArra = data.map(obj => {
  let val = {};
  val.name = Object.keys(obj)[0];
  val.y = obj[Object.keys(obj)[0]];
  return val;
 })
 
 console.log(JSON.stringify(reformattedArra));