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

Sai*_*ran 0 javascript arrays object lodash

让我们说我有一个阵列

var array = ["lionel", "messi"];
Run Code Online (Sandbox Code Playgroud)

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

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
}
Run Code Online (Sandbox Code Playgroud)

我想要最终的对象,

var obj = {
  "first-name": "lionel",
  "last-name": "messi"
}
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 5

您只需分配给这些属性:

obj["first-name"] = array[0];
obj["last-name"] = array[1];
Run Code Online (Sandbox Code Playgroud)

例:

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);
Run Code Online (Sandbox Code Playgroud)

在ES2015 +中,您可以使用解构赋值:

[obj["first-name"], obj["last-name"]] = array;
Run Code Online (Sandbox Code Playgroud)

例:

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


你在评论中说过:

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

如果您的意思是要根据其位置将条目分配给array对象属性,请注意,从ES2015开始,对象属性顺序是新的,并且很容易被误解.obj

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

var obj = {
  "first-name": "cristiano",
  "last-name": "ronaldo"
};
Run Code Online (Sandbox Code Playgroud)

...然后Object.getOwnPropertyNames将可靠地复位["first-name", "last-name"](Object.keys不是保证),这是因为:

  1. 对象初始值设定项按顺序创建属性
  2. 他们是"自己的"财产
  3. 它们有字符串名称(不是符号名称),
  4. 它们看起来不像数组索引
  5. 这是一个普通的对象

是的,这是很多警告.所以你可以使用它,像这样:

Object.getOwnPropertyNames(obj).forEach((key, index) => {
    obj[key] = array[index];
});
Run Code Online (Sandbox Code Playgroud)

例:

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);
Run Code Online (Sandbox Code Playgroud)

再次:这仅适用于完全符合ES2015 +标准的JavaScript引擎,其对象定义如上所示.报告属性的顺序getOwnPropertyNames可能很复杂; 规范中的详细信息.