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

时间:2018-09-02 00:28:49

标签: javascript arrays object

是否可以将值从数组映射到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 个答案:

答案 0 :(得分:3)

如果关系是顺序,则可以使用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循环中的顺序,但是请参见this,这两种方式中的顺序可能都不是联系事物的最佳方法。

答案 1 :(得分:1)

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

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

最终将修复对象中所有丢失的值。 另外,您还可以添加检查,以便仅对象中预先存在的值得到分配的值:

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