代码之家  ›  专栏  ›  技术社区  ›  Svinjica

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

  •  1
  • Svinjica  · 技术社区  · 6 年前

    假设我们有这样的数组

    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 回复  |  直到 6 年前
        1
  •  3
  •   Emeeus    6 年前

    如果关系是你可以使用的顺序 for in shift()

    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)

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

        2
  •  1
  •   Gigi    6 年前

    如果要映射,即使两个对象之间的关系可能不是顺序,也可以执行以下操作:

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

    此外,还可以添加一个复选框,以便仅为对象中的现有值指定值:

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