Javascript数组将转换数组转换为具有整数键的对象

时间:2019-05-24 20:52:11

标签: javascript object ecmascript-6

我正在尝试使用reduce方法将对象数组转换为对象。问题是我想用数字来表示对象键。

let crops = [{
  id: 1,
  name: "wheat"
}, {
  id: 2,
  name: "rice"
}];

let cropsObj = crops.reduce((accumulator, currentValue) => {
  accumulator[currentValue.id] = currentValue.name
  return accumulator;
}, {});

console.log(cropsObj);

除了我得到的键是字符串之外,这工作正常。例如:

{"1":"wheat","2":"rice"}

我想要的是{1:"wheat",2:"rice"}。如何将密钥转换为整数?

3 个答案:

答案 0 :(得分:2)

为了说明@MarkMeyer的评论:

  

键只能是javascript对象中的字符串(或符号)。

console.log({3: 4, '3': 5});

答案 1 :(得分:1)

let obj = {
  key: 4,
  123: 'one two three',
  1: 'one'
};

console.log(obj.key);
//console.log(obj.1); error
console.log(obj["1"]);
console.log(obj["123"]);

console.log(obj[1]);
console.log(obj[123]);

这是不可能的,因为任何JavaScript对象中的键都是JavaScript identifierstring

答案 2 :(得分:1)

出于您的目的(使用材料表),您当前的对象可以正常工作。 {1:"wheat"}实际上与{"1":"wheat"}相同。

Unquoted property names / object keys in JavaScript对原因进行了非常详细的说明。简而言之,可以使用数字属性名称,但会将它们强制转换为字符串。