开发者问题收集

是否可以将数组中的值添加到对象属性?

2018-09-02
84

是否可以将值从数组映射到 javascript 对象?

假设我们有这样的数组

var cars = ["Saab", "Volvo", "BMW"];

和一个对象

let someObject = {
SAAB: null,
VOLVO: null,
BMW: null
}

我想将值从数组映射到对象以像这样输出:

let someObject = {
    SAAB: "Saab",
    VOLVO: "Volvo",
    BMW: "BMW"
    }

我尝试了一些类似的方法,但失败了

for (let key of Object.entries(someObject)) {
  for (let index = 0; index < cars.length; index++) {
    key = cars[index];
  }
}

此外,我尝试了这个解决方案,但不知何故我错过了一些东西,它只映射了最后一个值

for (var key in someObject) {
  for (var car in cars) {
    someObject[key] = cars[car]
  }
}
console.log(someObject)

{SAAB: "BMW", VOLVO: "BMW", BMW: "BMW"}
2个回答

如果关系是顺序,则可以使用 for inshift()

var cars = ["Saab", "Volvo", "BMW"];

let someObject = {
SAAB: null,
VOLVO: null,
BMW: null
}


for(let p in someObject){
    someObject[p] = cars.shift()
}

console.log(someObject)

ECMAScript 规范不保证 For in 循环中的顺序,但请参阅 这个 ,无论哪种方式,顺序可能都不是关联事物的最佳方式。

Emeeus
2018-09-02

如果您想要映射,即使两个对象之间的关系可能不是按顺序排列,您也可以这样做:

for(let car of cars){
someObject[car.toUpperCase()] = car;
}

这最终会修复对象中所有缺失的值。 您还可以添加检查,以便只有对象中预先存在的值才会被分配其值:

for(let car of cars){
if(someObject[car.toUpperCase()])
    someObject[car.toUpperCase()] = car;
} 
Gigi
2018-09-02