首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个对象存储在另一个对象中

将一个对象存储在另一个对象中
EN

Stack Overflow用户
提问于 2021-07-09 15:41:08
回答 1查看 696关注 0票数 0

我需要在另一个对象中插入一个对象,并使用以下逻辑:

代码语言:javascript
复制
// Create object store
const store = {}

// Function to create 'Product' Objects
function createProduct (type, name, price) {
  return { type, name, price }
}

// Function to add 'Product' Objects inside the 'Store' Object
function addToStore (obj) {
  store.obj = obj
  return store
}

const strawberry = createProduct ('fruit', 'strawberry', '0.40')
const peach = createProduct ('fruit', 'peach', '0.80')

addToStore(strawberry)
addToStore(peach) 
console.log(store) // < { obj: { type: 'fruit', name: 'peach', price: '0.90' } }

如何编写此函数,使store.obj成为由参数传递的相同的obj?

代码语言:javascript
复制
function addToStore (obj) {
  store.obj = obj
  return store

// What's happening in the run
function addToStore (peach) {
  store.obj = peach
  return store

// What I need to happen
function addToStore (peach) {
  store.peach = peach
  return store
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-09 15:47:09

如果您希望属性名来自调用addToStore时使用的变量的名称,则不能完全这样做,因为当addToStore被调用时,它只接收到该变量的值(对对象的引用),它不会收到有关变量本身的任何信息。

简单的解决方案是将名称作为第二个参数传递:

代码语言:javascript
复制
function addToStore(name, obj) {
    store[name] = obj;
    return store;
}
// ...
addToStore("peach", peach);

注意,使用[]使属性名来自于name参数,而不是使用具有文字名称的.

有一种方法可以通过使用速记属性语法,以(非常小的)成本创建一个临时对象,使其更加自动化。在您想要的对象周围传递一个对象包装器,其中属性的名称来自变量名,并让addToStore从该包装器中获取对象(如果传递一个以上的话,也可以将它们全部取走):

代码语言:javascript
复制
function addToStore(objects) {
    Object.assign(store, objects); // Will do the loop and assignments for you
    return store;
}
// ...
addToStore({peach});
//         ^^^^^^^−−−−−−−−−−− creating the object to pass in using shorthand syntax

您可能不想在代码中这样做,因为开销会在一小时内执行数百万次,但如果不这样做,我就不会担心,除非/除非您遇到性能问题,才能找到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68319429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档