Javascript 定义JS对象属性的名称

Javascript 定义JS对象属性的名称,javascript,Javascript,我有一个看起来像那样的物体 {taxi: 1, food: 1, cinema: 2, drinks: 2} 我的目标是为这些属性定义一个名称,如下所示: const expenseCategories = [ { name: 'taxi', value: 1 }, { name: 'food', value: 1 }, { name: 'cinema', value: 2 }, { name: 'drinks', value: 2}, ]; 这是我的尝试,我离我想要实现的目

我有一个看起来像那样的物体

{taxi: 1, food: 1, cinema: 2, drinks: 2}
我的目标是为这些属性定义一个名称,如下所示:

const expenseCategories = [
  { name: 'taxi', value: 1 },
  { name: 'food', value: 1 },
  { name: 'cinema', value: 2 },
  { name: 'drinks', value: 2},
];
这是我的尝试,我离我想要实现的目标还很远。我知道这很简单,但我感到困惑

  var test = [];

  for (let x in expenseCategories) {
    // expenseCatAmountsObj.push(expenseCategories[x]);
    test.push( Object.defineProperty({}, {name : x}, { value: expenseCategories[x] }) )
  } 
它只返回对象内部的数组

[{…},{…},{…},{…},{…}]

您可以使用和

let obj={出租车:1,食物:1,电影院:2,饮料:2}
let out=Object.entries(obj.map)([name,value])=>({name,value}));

console.log(out)
我们可以使用map循环对象的键,这将返回一个结果数组:

let categories={出租车:1,食品:1,电影院:2,饮料:2};
让test=Object.keys(categories.map)(k=>{
返回{name:k,value:categories[k]}
});

控制台日志(测试)您的步骤几乎是正确的-只有
对象。defineProperty({},{name:x},{value:ExpenseCegories[x]})
是不必要的,因为它是一种非常复杂的方式来做您想要的事情。相反,只需使用对象文字:

var-expensecegories={出租车:1,食品:1,电影院:2,饮料:2}
var检验=[];
对于(支出类别中的x){
测试推送(
{
姓名:x,
价值:支出类别[x]
}
)
}

console.log(测试)
您可以使用
对象.key

let obj={出租车:1,食物:1,电影院:2,饮料:2}
设arr=[]
让keys=Object.keys(obj)
for(设i=0;iconsole.log(arr)
test.push({name:x,value:expensecegories[x]})
var-test=Object.keys(expensecories).map(key=>{name:key,value:expensecories[key]})如果要保持代码的原样,只需使用
Object.assign
而不是
defineProperty
。否则,只需按Chris的建议在一次射击中推动该项目。和的可能重复
const temp = {taxi: 1, food: 1, cinema: 2, drinks: 2};

let expenseCategories = Object.keys(temp).map(key => ({name: key, value: temp[key]}));