假设我有一个数组
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
不保证),因为:
- 属性是由对象初始值设定项按顺序创建的
- 它们是“自己的”属性(property)
- 它们有字符串名称(不是符号名称),
- 它们看起来不像数组索引,并且
- 这是一个普通的对象
是的,这是很多警告。所以你可以像这样使用它:
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/