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

标签 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 函数可以做到这一点吗?

最佳答案

您只需分配给这些属性:

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);

<小时/>

您在评论中说过:

but what if I had to do it dynamically? How do I loop over both in the array/object?

如果您的意思是要将 array 中的条目分配给 obj 中的对象属性他们的位置请注意,对象属性顺序是 ES2015 中的新内容,而且很容易被误解。

但是使用完全兼容 ES2015+ 的 JavaScript 引擎,如果您的对象确实定义为:

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

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

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

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

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

示例:

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);

再说一遍:这只适用于完全兼容 ES2015+ 的 JavaScript 引擎,并且对象定义如上所示。 getOwnPropertyNames 报告属性的顺序可能很复杂; details in the spec .

关于javascript - 如何在 JavaScript 中将数组元素指定为对象中的属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45710952/

相关文章:

JavaScript 属性最终会陷入循环

javascript - Angularjs - 2个不同 Angular 网站的通用模块

javascript - 如何在没有 API key 的情况下使用谷歌地图

javascript - 在数组映射的最后一个元素上自动触发单击事件处理程序。 Reactjs

c++ - 指向 4 维数组的指针

javascript - 编写一个函数,返回数组 Javascript 中所有项目的平均值

javascript - 编写一个函数来设置另一个函数中的一些但不一定是所有参数

javascript - 异步加载js但同步执行

ios - ObjC 将文本文件行添加到 PickerView

javascript - 如何将 Javascript 对象转换为 url 字符串?