如何在JavaScript中的对象中将数组元素指定为属性值?

时间:2017-08-16 10:20:22

标签: javascript arrays object lodash

假设我有一个数组

var array = ["lionel", "messi"];

我想将该数组元素的值用于对象中的属性值。

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
}

我想要最终的对象,

var obj = {
  "first-name": "lionel",
  "last-name": "messi"
}

我如何在JavaScript中执行此操作?或者是否有一个可以做到这一点的lodash功能?

4 个答案:

答案 0 :(得分:5)

您只需分配给这些属性:

obj["first-name"] = array[0];
obj["last-name"] = array[1];

示例:



var array = ["lionel", "messi"];
var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
};
obj["first-name"] = array[0];
obj["last-name"] = array[1];
console.log(obj);




在ES2015 +中,您可以使用解构分配:

[obj["first-name"], obj["last-name"]] = array;

示例:



var array = ["lionel", "messi"];
var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
};
[obj["first-name"], obj["last-name"]] = array;
console.log(obj);




在评论中你说过:

  

但如果我必须动态地做什么呢?如何在数组/对象中循环?

如果 ,则表示您要将array中的条目通过其位置<obj分配给对象属性/ em>,请注意,自ES2015起,对象属性订单是新的,并且很容易被误解。

但是使用完全符合ES2015标准的JavaScript引擎, if 您的对象确实被定义为:

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
};

...然后Object.getOwnPropertyNames将可靠地返回["first-name", "last-name"]Object.keys 保证),因为:

  1. 属性是由对象初始值设定项
  2. 按顺序创建的
  3. 他们拥有&#34;特性
  4. 他们有字符串名称(不是符号名称),
  5. 他们看起来不像数组索引,
  6. 这是一个普通的对象
  7. 是的,这有很多警告。所以你可以使用它,像这样:

    Object.getOwnPropertyNames(obj).forEach((key, index) => {
        obj[key] = array[index];
    });
    

    示例:

    &#13;
    &#13;
    var array = ["lionel", "messi"];
    var obj = {
      "first-name": "cristiano",
      "last-name": "ronaldo"
    };
    Object.getOwnPropertyNames(obj).forEach((key, index) => {
        obj[key] = array[index];
    });
    console.log(obj);
    &#13;
    &#13;
    &#13;

    再次:这仅适用于完全符合ES2015标准的JavaScript引擎,其对象定义如上所示。 getOwnPropertyNames报告属性的顺序可能很复杂; details in the spec

答案 1 :(得分:1)

这将有效:

&#13;
&#13;
var array = ["lionel", "messi"];
var order = ["first-name", "last-name"];

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
}

for(var i = 0; i < array.length; i++) {
  obj[order[i]] = array[i];
}

console.log(obj);
&#13;
&#13;
&#13;

Object.keys(obj)部分外,每件事都是不言自明的。它只返回一个obj键的数组(`[&#34; first-name&#34;,&#34; last-name&#34;])它获取每个键并将它们分配给你的数组。

编辑:

另外,正如tibetty在评论中所说,你需要一个订单数组。

答案 2 :(得分:1)

您可以实施为:

function heteroCopy(obj, array) {
    let keys = Object.keys(obj);
    for (let i in keys) {
        obj[keys[i]] = array[i];
    }
    return obj;
}

答案 3 :(得分:-1)

Javascript没有像PHP这样的关联数组的概念。您可以创建JSON(Javascript Object Notation)。请尝试理解使用对象的概念。不要使用对象,因为你想像数组一样使用它。 Javascript具有类的概念。您可以创建具有成员名字,姓氏的类。实例并分配您的值。